前言:今天遇到这个题目
有如下代码,var arr = new Array(5)
arr[0] = 10
arr[2] = 20
请问 arr的length的值是多少()?
答案是很容易知道的 就是5
由这个想到new Array()参数的问题 想总结一下他的参数的事情
1.没有参数 没有参数的时候返回的是空数组
var arrnone = new Array()
console.log(arrnone) // []
2.一个参数 当参数是一个5时返回的是一个长度为5的数组
var arrone = new Array(5)
var arronee = new Array('1')
var arroneee = new Array(true)
var arroneeee = new Array(undefined)
var arroneeeee = new Array(null)
console.log(JSON.stringify(arrone)) // [null,null,null,null,null]
console.log(arrone) // [empty * 5]
console.log(arronee) // ['1']
console.log(arronee) // [true]
console.log(arronee) // [undefined]
console.log(arronee) // [null]
3.两个及以上参数 当参数两个及两个以上,返回一个以参数组成的数组
var arrrandom = new Array('a', null, {a: 1,b: 2}, undefined, true)
// 数据在传输的过程中只能传输字符串,所以必须进行转义
console.log(JSON.stringify(arrrandom)) // ["a",null,{"a":1,"b":2},null,true]
衍生出的一个面试题
const array = new Array(5).map((item) => {
return item = {
name: '1'
}
});
console.log(JSON.stringify(array));
根据上面的学习可知道这个题目的答案是
[null,null,null,null,null],如果想把他变成[{name:'1'},{name:'1'},{name:'1'},{name:'1'},{name:'1'}]该怎么处理呢,查文档的话可以知道new Array(5)所生成的数组是没有被赋值的,而callback函数只会在有值得时候被调用,问题知道了,现在就是如何让一个无值得数组变得有值,这时候就会想到fill()方法,用一个固定值填充数组就可以了
const array = new Array(5).fill().map((item) => {
return item = {
name: '1'
}
});
console.log(JSON.stringify(array)); // [{"name":"1"},{"name":"1"},{"name":"1"},{"name":"1"},{"name":"1"}]
至此 问题解决
对了 Es6有一个Array.of 方法,不管参数有几个,总是返回参数值组成的数组。如果没有参数,就返回一个空数组
var att = Array.of()
var attt = Array.of(3)
console.log(att, attt) // [] [3]