Array
Array.length
length是一个小于2的32次方的正整数,一般情况下用来标记数组中元素的个数
var items = ['shoes', 'shirts', 'socks', 'sweaters'];
items.length;
// returns 4
来看奇怪地方
> var items = ['shoes', 'shirts', 'socks', 'sweaters']
> items.length
4
> items[8] = 'book'
'book'
> items.length
9
> items
[ 'shoes', 'shirts', 'socks', 'sweaters', , , , , 'book' ]
> Object.keys(items)
[ '0', '1', '2', '3', '8' ]
> items[5]
undefined
如果在数组length之外插入一个元素,数组并不会报错,中间位置的元素是undefined,同事length更新
没错,length是可以直接修改的
配置 | 值 |
---|---|
Writable | yes |
Enumerable | no |
Configurable | no |
> items
[ 'shoes', 'shirts', 'socks', 'sweaters', , , , , 'book' ]
> items.length = 2
2
> items
[ 'shoes', 'shirts' ]
>
当设置新length小于原始的length时,数组会被截断,类似splice
详细解释直接戳
Array.from()
使用array-like和iterable object生成一个新的array
Array.from('foo');
// ["f", "o", "o"] //字符串可枚举
//某些情况下可以替换string.split("")了
'foo'.split("")
[ 'f', 'o', 'o' ]
函数原型
- 参数
Array.from(arrayLike[, mapFn[, thisArg]])
arrayLike :类数组或者可枚举对象,如"hahaha"、{length:5}
mapFn : 可选,处理arrayLike中的每一个元素(value,index)=>{return value}
thisArg: 可选,将作为mapFn的this - 返回值
一个新的Array实例
var self = {
value:10
}
var arr = Array.from([1,2,3],function(value,index){
console.log(value,index,' this = ',this);
return value + this.value;
},self)
console.log(arr);
....终端输出.....
➜ JavaScript node Array.js
1 0 ' this = ' { value: 10 }
2 1 ' this = ' { value: 10 }
3 2 ' this = ' { value: 10 }
[ 11, 12, 13 ]
可以看到mapFn对每一个元素做了处理,其中的this就是thisArg
此处测试发现一个坑,mapFn如果使用es6箭头函数,thisArg并没有绑定到mapFn,即便手动bind()也不行。。。建议还是使用es5 function(v,i){return xxx}
Array.isArray()
该方法鉴定传入的值是否为Array
> Array.isArray(['a','b','c'])
true
> Array.isArray({length:5})
false
> Array.isArray(undefined)
false
函数原型
Array.isArray(obj)
- 参数
obj :需要鉴定的对象 - 返回值
如果obj是Array,则返回true;否则返回false