Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么';t`new Array(new Number(3))`生成长度为3的数组?_Javascript - Fatal编程技术网

Javascript 为什么';t`new Array(new Number(3))`生成长度为3的数组?

Javascript 为什么';t`new Array(new Number(3))`生成长度为3的数组?,javascript,Javascript,当我在控制台中写入新数组(新编号(3))时,它会生成一个长度为1的数组,其中该项是编号对象,其值为=3。为什么数组构造函数处理的新编号(3)与原始版本的3不同 是否有人可以将我链接到指定此数组行为的标准文档 这是我通常需要注意的,还是特定于数组构造函数 谢谢 如果传递给数组构造函数的唯一参数是整数 在0和232-1(包括0和232-1)之间,返回一个新的JavaScript数组 将其“长度”属性设置为该数字 新数字(3)的实例不是整数(数字) 从JavaScript控制台: > type

当我在控制台中写入
新数组(新编号(3))
时,它会生成一个长度为1的数组,其中该项是
编号
对象,其
值为
=3。为什么数组构造函数处理的新编号(3)与原始版本的
3
不同

  • 是否有人可以将我链接到指定此
    数组
    行为的标准文档
  • 这是我通常需要注意的,还是特定于数组构造函数
  • 谢谢

    如果传递给数组构造函数的唯一参数是整数 在0和232-1(包括0和232-1)之间,返回一个新的JavaScript数组 将其“长度”属性设置为该数字

    新数字(3)
    的实例不是整数(数字)


    从JavaScript控制台:

    > typeof(3)
    "number"
    
    > typeof(new Number(3))
    "object"
    
    因此,以下两种方法都可以生成单元素数组:

    • 新阵列(新编号(3))
    • 新数组(新日期())
    因为您传递的是
    对象
    ,而不是
    号码


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

    数组可以采用表示其元素的n个参数,也可以采用具有数组长度的数字()

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

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

    新的 阵列(阵列长度)

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

    如果控制台记录以下值,您将看到
    新编号(3)不是整数

    typeof 3
    "number"
    
    typeof Number(3)
    "number"
    
    typeof new Number(3)
    "object"
    
    由于
    newnumber(3)
    是一个对象,它认为它是元素,在这种情况下,您将传递数组的第一个元素

    如果使用
    新数组(编号(3))但是,这会起作用,因为
    编号(3)
    是编号类型

    您还可以参考newnumber()的定义:

    价值观

    正在创建的对象的数值

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

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

    这就解释了为什么数字(3)会像铸造3(或“3”)一样工作

    console.log(类型3);//数
    console.log(类型编号(3));//数
    console.log(数字类型(“3”));//数
    console.log(新编号的类型(3));//对象
    console.log(新数组(3));//[,,]
    console.log(新数组(编号(3));//[,,]
    console.log(新数组(编号(“3”));//[,,]
    console.log(新数组(新编号(3));//[{}]
    因为在
    新数组(新编号(3))
    中,参数
    新编号(3)
    返回一个
    对象,而不是
    编号

    其中as
    newarray(Number(3))
    将作为
    Number(3)
    返回3,即数字

    感谢,以下是规格:

    步骤7:“如果类型(len)不是数字,则

  • 让defineStatus成为CreateDataProperty(数组,“0”,len)
  • 断言:defineStatus为真
  • 让intLen为1
  • 因为
    new Number()
    使用一个数值,它将创建一个该大小的空数组

    只需在控制台中键入:

    var n = new Number(3);
    
    您将获得一个类型为
    Number
    的对象,其原语值为3,这与

    var n = 3;
    

    ->步骤7:“如果类型(len)不是数字,那么…”与新数字的类型(3)==“object”
    ,这对于理解
    新数字(或
    布尔值
    )也很有用不是很有用,因为它将普通标量包装到一个对象中:最好通过显示调用
    Number.isInteger()
    :即
    Number.isInteger(新数字(3))==false
    Number.isInteger(3)的结果来说明这一点===true
    @HereticMonkey,谢谢。这将完成一个答案。谢谢!如果您可以使用ECMAScript链接在@Andreas'评论中编辑,那么我将接受这个答案:)
    var n = 3;