关于new Array()参数的事情

901 阅读2分钟

前言:今天遇到这个题目

有如下代码,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]