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
不同
数组
行为的标准文档新数字(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)
返回一个对象,而不是编号
其中asnewarray(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;