空值是一个对象吗?

6

可能是重复问题:
JavaScript中的Null对象

Null是一个对象,对吗?那么如果我将x设置为null,为什么无法获取构造函数的值?

 var x = null;
 alert(typeof x);
 alert(x.constructor);

1
也可能是<a href="https://dev59.com/bXA65IYBdhLWcg3wuhMR">JavaScript中的null是一个对象吗?</a>的重复问题。 - bcosca
@birryree,这不是那个话题的重复。那个话题是关于nullundefined之间的区别,而这个问题是关于null本身是否是一个对象的问题。 - Harmen
2个回答

10

null 在JS中是一个原始值。它没有由任何构造函数构建,因此它没有constructor属性。 typeof null 被称为'object'只是为了历史原因而保留下来的可怕谎言。不要期望从JS中获得太多一致性,否则会感到失望!

由于自动装箱,原始值在JS中通常可以表现得像对象:(1).constructor有效尽管1也是一个原始值,因为它隐式调用了new Number(1)。但是,null(或undefined)没有对象形式可供自动转换,所以在这种情况下会出错。

通常应避免使用constructor。对于许多基于JS构建的类/实例模型,它根本不起作用。相比之下,instanceof通常效果更好。


不要对JS期望太高的一致性...需要有支持。 - Ben Aston

0

在Javascript中,Null不是一个对象 - Null是null原始类型的唯一实例,因此没有构造函数。


是的,但只有一个,只有“无”可以是“无” - 没有别的东西可以是“无”,如果你把任何东西变成了某物,它就不再是“无”了。 - Dylan Beattie

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