JavaScript-内置对象Array

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

持续更新。。。。

你可能感兴趣的:(JavaScript-内置对象Array)