2010-09-07 63 views
10

可能重复:
Null object in javascript在JavaScript中是否为null对象?

嗨,我读过有关this thread在JavaScript空,但我很困惑的null的身份了。

由于已知typeof(null)由于the language design error而评估为object,并且ECMA指出null为The Null Type

8.2 The Null Type 
    The Null type has exactly one value, called null. 

那么为什么人们总是说null是一个对象?

有人说null是一个单例对象。大家如何看待JavaScript中的null?

+1

@ karim79是的,我已经读过这个帖子,并把我的问题作为一些答案的评论,但没有得到答复,所以我在这里提出了它。谢谢 – c4il 2010-09-07 21:41:49

+1

你用报价回答了你自己。 null(表示自己的值 - 读作:“其他任何东西” - 以及null === null,全为null)是Null Type的唯一占有者。正如你所指出的那样,实际的“对象”是可以争论的,但是null的特征使它成为一个最基本的静音点。 – 2010-09-07 21:44:16

+0

您的链接“语言设计错误”引用道格拉斯克罗克福德的一篇文档 - 我(个人)不会建议您逐字逐句说出所有内容。 – Reinsbrain 2014-11-18 18:19:46

回答

10

Null是没有对象。未定义表示尚未分配,而空表示它已被分配为空。

Null并不是一个单独的对象,因为解引用它会导致错误; for (var x in null)会给你一个错误。回想指针的日子; null是指针在没有指向对象时的值。

+1

'for(var x in null);'不会抛出许多浏览器,尽管它应该至少按照[第3版](http://bclary.com/2004/11/07/#a- 12.6.4)ECMAScript('ToObject'操作在值为'null'或'undefined'时抛出)。但是现在[ECMAScript 5](http://www.ecma262-5.com/ELS5_HTML.htm#Section_12.6.4)已经改变了,如果表达式是'null'或者'undefined',那么语句简单地结束正常声明完成)。 – CMS 2010-09-07 22:14:49

+1

不错,HTML格式的ECMA规范。我一直在寻找那个! :) – c4il 2010-09-07 22:26:58

7

不,null是少数基本类型之一(其他是数字,字符串,布尔值和未定义的)。其他的东西都是一个对象,包括函数,数组和正则表达式。数字,字符串和布尔值通常被称为“类对象”,因为它们有方法,但是它们是不可变的。 另一方面,对象是可变的。

+0

可变性与作为对象无关。请参阅EcmaScript 5中的Object.freeze,它允许创建不可变对象。 EcmaScript 3中的本地对象也是对象,可以是不可变的。空不是一个对象,因为它可以响应没有消息 - 没有属性或方法。这就是为什么(空instanceof类型)对所有类型都是false的原因。 – 2010-09-07 22:13:27

+1

@mikesamuel:从我的回答中删除了“违规”部分:) – 2010-09-07 22:18:48

+0

*类似对象*可能是一个错误的术语,用于描述在试图用作对象时如何暂时装箱原语。 – alex 2016-01-27 10:49:36

1

null不能被视为一个对象,因为它不能具有属性。它是代表原语的关键字,如truefalse

> true instanceof Object 
false 
> null instanceof Object 
false