JavaScript 中的对象分为3种:
- 自定义对象,
var obj = {}
- 内置对象,
Math, Date,
Array、String等 - 浏览器对象
BOM
前面两种对象是JS 基础 内容,属于 ECMAScript;
第三个浏览器对象BOM Web API 讲解
基本包装类型
-
为了方便操作基本数据类型,JavaScript 还提供了三个特殊的引用类型:String、Number和 Boolean。
-
每当读取一个基本类型值的时候,后台就会创建一个对应的基本的包装类型对象,可以使我们调用一些方法操作这些数据。
-
基本包装类型就是把简单数据类型包装为复杂数据类型,这样基本数据类型就有了属性和方法。
我们来看一个问题:
// 下面代码有什么问题?
var str = 'andy';
console.log(str.length);
按道理基本数据类型是没有属性和方法的,而对象才有属性和方法,但上面代码却可以执行,这是因为js 会把基本数据类型包装为引用数据类型,其执行过程如下 :
// 1. 生成临时变量,把简单类型包装为复杂数据类型
var temp = new String('andy');
// 2. 赋值给我们声明的字符变量
str = temp;
// 3. 销毁临时变量
temp = null;
对于基本包装类型来说,只有处于“读取模式”的时候,后台才会自动创建相对应的对象,调用指定的方法之后,就立即销毁该对象了,这就意味着我们不能在运行的时为基本类型值添加属性和方法。
根据字符返回位置-indexOf()
与数组的indexOf()使用方法一致
// 字符串对象 根据字符返回位置 str.indexOf('要查找的字符', [起始的位置])
var str = '改革春风吹满地,春天来了';
console.log(str.indexOf('春'));
console.log(str.indexOf('春', 3)); // 从索引号是 3的位置开始往后查找
案例:查找字符串"abcoefoxyozzopp"中所有o出现的位置以及次数
//1.先查找第一个o出现的位置
//2.然后 只要indexOf 返回的结果不是 -1 就继续往后查找
//3.因为indexOf 只能查找到第一个,所以后面的查找,利用第二个参数,当前索引加1,从而继续查找
var str = "abcoefoxyozzopp";
var index = str.indexOf('o');
var num = 0;
// console.log(index);
while (index !== -1) {
console.log(index);
num++;
index = str.indexOf('o', index + 1);
}
console.log('o出现的次数是: ' + num);
根据位置返回字符
// 根据位置返回字符
// 1. charAt(index) 根据位置返回字符
var str = 'andy'; console.log(str.charAt(3));
// 遍历所有的字符
for (var i = 0; i < str.length; i++) {
console.log(str.charAt(i));
}
// 2. charCodeAt(index) 返回相应索引号的字符ASCII值 目的: 判断用户按下了那个键
console.log(str.charCodeAt(0)); // 97
// 3. str[index] H5 新增的
console.log(str[0]); // a
案例:判断一个字符串 'abcoefoxyozzopp' 中出现次数最多的字符,并统计其次数
var str = 'abcoefoxyozzopp';
// 1. 制作字符字典
var o = {}; // {'a':1,'b':1,'c':1,'o':4,'e:'1,'f':1}
for (var i = 0; i < str.length; i++) {
var chars = str.charAt(i); // chars 是 字符串的每一个字符 : a,b,c,o.....o
// 判断chars中的字符,是否在o对象中
// o[chars] 得到的是属性值 :
// 循环第一次:if(o['a']) --- 取出o对象中属性名叫做a的属性值 , 没有默认值为undefined
// if(undefined) : if小括号内有隐式转换---- false
// 如果循环到第二个o,o['o'] --- 1 --- true ,o中有o属性,有的话值就++
if (o[chars]) {
o[chars]++; // o['o']=o['o']+1
} else { // 代表当前o对象中没有chars存储的字符的属性 , o没有a属性
o[chars] = 1; // 没有就添加一个a属性,并且给a添加值为1.----- o['a'] = 1
}
}
console.log(o);
// 2. 遍历字典
var max = 0;
var ch = '';
for (var k in o) { // k='a' , k='o'
// k 得到是 属性名
// o[k] 得到的是属性值
if (o[k] > max) { // o['a'] > max -- 1 > 0 , o['o'] > max , 4 > 1
max = o[k]; // max = 1 , max = 4
ch = k; // ch = 'a' , ch = 'o'
}
}
console.log(max);
console.log('最多的字符是' + ch);
字符串操作方法
// 字符串操作方法
// 1. concat('字符串1','字符串2'....)
var str = 'andy'
console.log(str.concat('+','baaby')); //andy+baaby
// 2. substr('截取的起始位置', '截取几个字符');
console.log(str.substr(0,2));
// 3. 替换字符 replace('被替换的字符', '替换为的字符') 它只会替换第一个字符
var str = 'abdyabdyabdy'
console.log(str.replace('a','c'));
// 把所有的a 变为c
while (str.indexOf('a') !==-1) {
str = str.replace('a','c')
}
console.log(str);
// 4. 字符转换为数组 split('分隔符') 前面我们学过 join 把数组转换为字符串
var str = 'pink-red-blue'
var arr = str.split('-')
console.log(arr);
var str1 = '1+2+3+4'
var arr1 = str1.split('+')
console.log(arr1);
var arr = [1,2,3,4]
console.log(arr.join('-'));