代码之家  ›  专栏  ›  技术社区  ›  user993683

为什么“new Array(new Number(3))`不生成长度为3的数组?

  •  3
  • user993683  · 技术社区  · 7 年前

    new Array(new Number(3)) 在控制台中,它生成一个长度为1的数组,其中该项是 Number valueOf new Number(3) 不同于原始版本的 3 ?

    1. 有人能把我和标准文件联系起来吗 Array 是否指定了行为?
    2. 这是我通常需要注意的问题,还是特定于数组构造函数?

    谢谢!

    5 回复  |  直到 7 年前
        1
  •  2
  •   Community Mohan Dere    6 年前

    因为在 new Array(new Number(3)) new Number(3) 返回一个 object 而不是 number .

    作为 new Array(Number(3)) Number(3) 返回3,数字。

    @Andreas' comment ,规格如下: ECMAScript 22.1.1.2 Array (len)

    步骤7:“如果Type(len)不是Number,那么

    1. 断言:defineStatus是真的。
    2. 设intLen为1。
        2
  •  2
  •   Fabio    7 年前

    From the MDN

    如果传递给数组构造函数的唯一参数是整数 介于0和2之间 32 -1(含),则返回一个新的JavaScript数组 将其长度属性设置为该数字

    实例 new Number(3)

    Number.isInteger(3) // -> true
    
    Number.isInteger(Number(3)) // -> true
    
    Number.isInteger(new Number(3)) // -> false
    
        3
  •  2
  •   Matt    6 年前

    从JavaScript控制台:

    > typeof(3)
    "number"
    
    > typeof(new Number(3))
    "object"
    

    因此,以下两种方法都可以生成单元素数组:

    • new Array(new Number(3))
    • new Array(new Date())

    object ,不是 number .

    (这不是直接回答您的问题,但希望在任何情况下都能提供清晰的答案。)

        4
  •  1
  •   nitobuendia    7 年前

    syntax ).

    新数组(element0,element1[,…[,elementN]])

    元素 JavaScript数组用给定的元素初始化, 只有一个参数传递给数组的情况除外 构造函数,该参数是一个数字(请参见arrayLength 参数)。请注意,此特殊情况仅适用于 用括号语法创建的文本。

    阵列(arrayLength)

    排列长度 传递给数组构造函数的参数是介于0和之间的整数 232-1(含),返回一个新的JavaScript数组及其长度 属性设置为该数字(注意:这意味着 排列长度为空的插槽,而不是具有实际未定义值的插槽)。如果 如果参数是任何其他数字,则会引发RangeError异常。

    new Number(3); 不是整数。

    typeof 3
    "number"
    
    typeof Number(3)
    "number"
    
    typeof new Number(3)
    "object"
    

    作为 new Number(3)

    如果你使用 new Array(Number(3)); Number(3)

    您还可以参考new Number()的定义( syntax

    价值

    正在创建的对象的数值。

    很明显,它正从这个解释中返回一个对象。当你做数字(x)时,会发生类型转换:

    在非构造函数上下文中(即,没有新运算符),Number可用于执行类型转换。

    这就解释了为什么数字(3)会像将3(或“3”)转换成数字一样工作。

    console.log(typeof 3);  // number
    console.log(typeof Number(3));  // number
    console.log(typeof Number("3"));  // number
    console.log(typeof new Number(3)); // object
    
    
    console.log(new Array(3)); // [,,]
    console.log(new Array(Number(3))); // [,,]
    console.log(new Array(Number("3"))); // [,,]
    console.log(new Array(new Number(3))); // [{}]
        5
  •  0
  •   BitShredder    7 年前

    因为 new Number() Number . 如果使用数组的构造函数初始化数组 new Array() 新建数组() 使用一个数值,它将创建一个该大小的空数组。

    只需在控制台中键入:

    var n = new Number(3);
    

    你得到了一个 数字 原语值为3时,这与

    var n = 3;