内置对象
字符串对象String
var str = 'candy';
console.log(str.length); // 5
// 对象(也就是复杂数据类型)才有属性和方法
// 在此的简单数据类型为什么会有length属性???
// 基本包装类型: 就是把简单数据类型 包装成为了 复杂数据类型
// 上述代码的实际执行过程:
// (1)把简单数据类型 包装成为了 复杂数据类型
var temp = new String('candy');
// (2)把临时变量的值给str
str = temp; // 此时str就是一个复杂数据类型
// (3)销毁临时变量
temp = null;
字符串的不可变
指的是里面的值不可变,虽然看上去可以改变内容,但其实是地址变了,内存中新开辟了一个内存空间。
- 不要大量拼接字符串,不要频繁更改字符串。
字符串中所有的方法,都不会修改字符串本身(字符串是不可变的),操作完成会返回一个新的字符串(即新开辟一块内存,存放)。
根据字符,返回字符位置【索引】
方法名 | 说明 | 返回值 |
---|---|---|
indexOf(‘要查找的字符’[,开始位置]) | 查找给定元素的第一个索引 | 存在返回索引号,不存在,返回-1 |
lastIndexOf(元素) | 给定元素的最后一次索引 | 存在返回索引号,不存在,返回-1 |
var str = 'hello world';
console.log(str.indexOf('l')); // 2
console.log(str.indexOf('l', 5)); // 9 从索引5开始查找
console.log(str.lastIndexOf('l')); // 9
// 查找字符串'abcoefoxyozzopp'中所有o出现的位置以及次数
// 先查找第一个o出现的位置——只要indexOf返回的不是-1,就继续往后查找(从当前索引+1开始查找)
var str = 'abcoefoxyozzopp';
var arr = []; // 存放位置 实际上是索引
for(var i = str.indexOf('o'); i < str.length; ){
arr.push(i);
i = str.indexOf('o', i+1);
if(i == -1){
break;
}
}
console.log(arr); // [3, 6, 9, 12]
根据位置返回字符【重点】
方法名 | 说明 | 使用 |
---|---|---|
charAt(index) | 返回指定位置的字符(index字符串的索引) | str.charAt(0) |
charCodeAt(index) | 获取指定位置处字符的ASCII码;可以判断用户按下了哪个键-游戏 | str.charCodeAt(0) |
str[index] | 获取指定位置处字符 | HTML5,IE8+支持 和charAt()等效 |
// 根据位置返回字符
var str = 'I love myself!';
console.log(str.charAt(3));
// 遍历所有的元素
for(var i = 0; i < str.length; i++){
console.log(str.charAt(i));
}
console.log(str.charCodeAt(2));
// H5 新增的
console.log(str[4]); // v
案例
// 前情提要
/* 有一个对象
var o = {
age : 18
}
if(o['age']){
console.log('里面有该属性');
}
else{
console.log('没有该属性');
} */
// 判断一个字符串'abcoefoxyozzopp'中出现次数最多的字符,并统计其次数
/*思路
1、把每个字符存储给对象,如果对象没有该属性,就为1,如果存在了,就+1
2、遍历对象,得到最大值和该字符
*/
var str = 'abcoefoxyozzopp';
var obj = {
}; // 存放字符及其出现次数
for(var i = 0; i < str.length; i++){
var c = str.charAt(i);
if(obj[c]){
obj[c] ++;
}
else{
obj[c