JavaScript 的怪异之处 - typeof [] === typeof {} 评估为'true'

4

我知道在JS中,严格相等会评估两个方面:相等性和类型的一致性。

Object.is()是我找到的最接近的比较方法,但它并没有为我的调查提供更多的信息。

有没有懂得 JS 底层原理的人可以解释一下?数组是非常奇怪的对象实现吗?所以它们在这里都是空的,并且评估结果相同吗?

我感到非常困惑,只是好奇。


嗯,typeof 0 === typeof 3。那又怎样? - Bergi
数组是对象(具有整数属性的优化访问和特殊的.length属性)。 - Bergi
1
typeof 只是一个查找表。请参阅 http://www.ecma-international.org/ecma-262/5.1/#sec-11.4.3 。另一件事是,所有不是原始值(数字、字符串、布尔、null、undefined)的东西都是对象。 - Felix Kling
@FelixKling Null是一个对象。 - Jared Smith
1
@JaredSmith:不是这样的:http://www.ecma-international.org/ecma-262/5.1/#sec-8.2 - Felix Kling
2个回答

3

typeof 返回操作数的原始类型。除了布尔值、数字、字符串、函数和未定义的情况外,其他类型都是对象。


1
“function” 不是一种类型,但是 “typeof” 很奇怪。 - vkurchatkin
@vkurchatkin 我的意思是,你可以试一下:typeof function() { } === "function" - Asad Saeeduddin
是的,但它不是一种类型。函数的实际类型是“对象”。 - vkurchatkin

2

数组是带有许多额外方法的对象 -- MDN将它们定义为“高级、类似列表的对象”,并继续说道:

数组是类似列表的对象,其原型具有执行遍历和变异操作的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接