3.4 内置对象
3.4.1概念
- JavaScript中提供多个内置对象:
String、Math、Array、Date......
3.4.2 Array对象
检测一个对象是否是数组
-
instanceof运算符
var arr = new Array(1,2,3,4); console.log(arr instanceof Array); // true
-
isArray( )方法
var arr = new Array(1,2,3,4); console.log(Array.isArray(arr));
toString( )与valueOf( )方法
-
toString( )方法
把数组转换成字符串,逗号分隔每一项 -
valueOf( )方法
返回数组对象本身var arr = new Array(1,2,3,4); console.log(arr.toString()); // 1,2,3,4 console.log(arr.valueOf()); // [1, 2, 3, 4]
常用方法
-
join(separator)方法
将数组的元素组成一个字符串,以separator为分隔符,省略的话则用默认用逗号为分隔符,该方法只接收一个参数:即分隔符。var arr = [1,2,3,4]; console.log(arr.join()); // 1,2,3,4 console.log(arr.join("-")); // 1-2-3-4 console.log(arr); // [1, 2, 3, 4]
-
push( )和pop( )方法
push( )接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度;
pop( )数组末尾移除最后一项,减少数组的length值,然后返回移除的项。var arr = ["a","b","c","d"]; var count = arr.push("e","f"); console.log(count); // 6 console.log(arr); // ["a", "b", "c", "d", "e", "f"] var item = arr.pop(); console.log(item); // f console.log(arr); // ["a", "b", "c", "d", "e"]
-
shift( ) 和 unshift( )方法
shift( ) 删除原数组第一项,并返回删除元素的值, 如果数组为空则返回undefined;
unshift( ) 将参数添加到原数组开头,并返回数组的长度。var arr = ["a","b","c","d"]; var count = arr.unshift("e","f"); console.log(count); // 6 console.log(arr); // ["e", "f", "a", "b", "c", "d"] var item = arr.shift(); console.log(item); // e console.log(arr); // ["f", "a", "b", "c", "d"]
-
reverse( )方法
反转数组项的顺序var arr = ["a","b","c","d"]; console.log(arr.reverse()); // ["d", "c", "b", "a"] console.log(arr); // ["d", "c", "b", "a"] (原数组改变)
-
concat( )方法
将参数添加到原数组中。这个方法会先copy一个当前数组,然后将接收到的参数添加到这个copy数组的末尾,最后返回新构建的数组。在没有给concat()方法传递参数的情况下,它只是复制当前数组并返回。var arr = ["a","b","c","d"]; newArr = arr.concat(3,5,["哈哈","嘿嘿"]); // ["a", "b", "c", "d", 3, 5, "哈哈", "嘿嘿"] console.log(newArr); console.log(arr); // ["a","b","c","d"] (原数组未被修改)
-
indexOf( )和lastIndexOf( )方法
1.indexOf ( )接收两个参数:要查找的项和(可选的)表示查找起点位置的索引,(从数组的开头(位置 0)开始向后查找)并返回某个指定的字符串值在字符串中首次出现的位置。
2.lastIndexOf接收两个参数:要查找的项和(可选的)表示查找起点位置的索引。其中,从数组的末尾开始向前查找。var arr = [2,4,6,8,8,4,6,2]; console.log(arr.indexOf(4)); // 1 console.log(arr.lastIndexOf(4)); // 5 console.log(arr.indexOf(4,2)); // 5 console.log(arr.lastIndexOf(4,4)); // 1 console.log(arr.indexOf("4")); // -1
这两个方法都返回要查找的项在数组中的位置,或者在没找到的情况下返回-1。
在比较第一个参数与数组中的每一项时,会使用全等操作符。
-
forEach()
这个方法只支持IE8以上的浏览器, 所以如果需要兼容IE8,则不要使用forEach,还是使用for循环来遍历
使用:
forEach()方法需要一个函数作为参数
该函数,由我们创建但是不由我们调用的,称为回调函数
数组中有几个元素, 函数就会执行几次,每次执行时,浏览器会将遍历到的元素以实参的形式传递进来,我们可以来定义形参,来读取这些内容
浏览器会在回调函数中传递三个参数
第一个参数,就是当前正在遍历的元素
第二个参数,就是当前正在遍历的元素的索引
第三个参数,就是正在遍历的数组
格式:
eg:var arr = [11,22,33,44,55,66] arr.forEach(function(value , index , obj){ console.log(index); console.log(value); // 0 // 11 // 1 // 22 // 2 // 33 // 3 // 44 // 4 // 55 // 5 // 66 });
-
sort( ) 方法
用于对数组的元素进行排序,默认是按照字符编码的顺序进行排序
语法:arrayObject . sort(sortby);
如果想按照其他标准进行排序,就需要提供比较函数,比较函数应当具有两个参数,返回值如下
若a<b,在排序后的数组中,a应该出现在b之前,则返回一个小于0的值
若a=b,则返回0
若a>b,则返回一个大于0的值
eg1:arr = ["George","John","Thomas","James","Adrew","Martin"]; console.log(arr); // ["George", "John", "Thomas", "James", "Adrew", "Martin"] console.log(arr.sort()); // ["Adrew", "George", "James", "John", "Martin", "Thomas"]
eg2:
arr = ["10","5","40","25","1000","1"]
console.log(arr);
// ["10", "5", "40", "25", "1000", "1"]
console.log(arr.sort());
// ["1", "10", "1000", "25", "40", "5"]
eg3:升序排序
arr = [8,5,6,3,2,4,9,6,5,7];
function b2s(a,b) { // 定义排序函数
return a-b ;
}
console.log(arr.sort(b2s));
ES6新增方法:
-
map( ) 方法
“映射”,对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。
eg:var arr = [1, 2, 3, 4, 5]; var arr2 = arr.map(function(item){ return item*item; }); console.log(arr2); //[1, 4, 9, 16, 25]
-
filter( ) 方法
“过滤”功能,数组中的每一项运行给定函数,返回满足过滤条件组成的数组。
eg:var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; var arr2 = arr.filter(function(x, index) { return index % 3 === 0 || x >= 8; }); console.log(arr2); //[1, 4, 7, 8, 9, 10]
-
every(且) 方法
判断数组中每一项都是否满足条件,只有所有项都满足条件,才会返回true。
eg:var arr = [1, 2, 3, 4, 5]; var arr2 = arr.every(function(x) { return x < 10; }); console.log(arr2); //true var arr3 = arr.every(function(x) { return x < 3; }); console.log(arr3); // false
-
some( 或) 方法
判断数组中是否存在满足条件的项,只要有一项满足条件,就会返回true。
eg:var arr = [1, 2, 3, 4, 5]; var arr2 = arr.some(function(x) { return x < 3; }); console.log(arr2); //true var arr3 = arr.some(function(x) { return x < 1; }); console.log(arr3); // false
3.4.3 Math对象
概念
Math对象不是构造函数,它具有数学常数和函数的属性和方法,都是以静态成员的方式提供
常用方法
- Math.PI
表示的圆周率
- Math.abs()
计算一个数的绝对值
- Math.ceil()
对一个数进行向上取整,小数位只要有值就自动进1
- Math.floor()
对一个数进行向下取整,小数部分会被舍掉
- Math.round()
对一个数进行四舍五入取整
- Math.random()
可以用来生成一个0-1之间的随机数
Math.random()x:生成一个0-x之间的随机数
Math.random()(y-x)+x:生成一个x-y之间的随机数
- Math.max()
获取多个数中的最大值
- Math.min()
获取多个数中的最小值
- Math.pow(x,y)
返回x的y次幂
- Math.sqrt()
对一个数进行开方运算
其他方法
静态成员与实例成员
静态成员:由构造函数直接访问到的属性和方法。
实例成员:由构造函数创建出来的对象能直接访问的属性和方法,包括:对象本身 以及原型中的所有的属性和方法。
注意点
实际开发中一般不太用Math对象而是用Underscore.js库来对函数或数值进行操作
3.4.4 String对象
概念
字符串中所有的方法,都不会改变字符串本身(字符串本身是不可变得),操作完会返回一个新的字符串
性能问题
拼接大量字符串时,会有耗费性能大问题,一般不使用字符串自身的方法,而是使用服务器渲染或是模板引擎
常用方法
1.获取字符串中字符的个数
str.length
2.字符方法
charAt( )
// 获取指定位置处的字符串
eg:str.charAt( 0)
charCodeAt( )
// 获取指定位置处字符的ASCII码
通过下标获取 // HTML5,IE8+支持和charAt( ) 等效
3.字符串操作方法
concat( )
// 拼接字符串,等效于 +
slice( )
// 从start位置开始,截取到end位置,end取不到
substring( )
// 从start位置开始,截取到end位置,end取不到
substr( )
// 从start位置开始,截取length个字符
4.位置方法
indexOf( )
// 返回指定内容在原字符串中的位置
lastIndexOf( )
// 返回一个指定的字符串值最后出现的位置,在一个字符串中的指定位置从后向前搜索。
5.去除空白
trim( )
// 只能去除字符串前后的空白
6.大小写转换方法
toUpperCase( )
// 转换大写
toLowerCase( )
// 转换小写
7.其他
search( ) // 用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串
split( ) // 用于把一个字符串分割成字符串数组
语法:
stringObject.split(separator,howmany);
separator >>>>>> 必需。字符串或正则表达式,从该参数指定的地方分割 stringObject
howmany >>>>>> 可选。该参数可指定返回的数组的最大长度。如果设置了该参数,返回的子串不会多于这个参数指定的数组。如果没有设置该参数,整个字符串都会被分割,不考虑它的长度。
注意点:
如果把空字符串 ("") 用作 separator,那么 stringObject 中的每个字符之间都会被分割。