为什么不能将属性添加到空值?

Mus*_*aie 1 javascript null properties typeerror

如果nulljavascript的值是一个空对象,为什么不能为它添加属性?以下代码清除了我的问题:

var a = null;

typeof a;
>>> "object"

a.name = 'name';
>>> TypeError: Cannot set property 'name' of null

var a = new Object();

typeof a;
>>> "object"

a.name = 'name';
>>> "name"
Run Code Online (Sandbox Code Playgroud)

小智 7

根据定义,null值和undefined值都没有任何属性,也不能向它们添加任何属性.

这很好地归结为null:

原始,表示故意缺少任何对象值.

同样,对于undefined:

原始,表示故意缺少任何对象值.

(null是Null类型undefined的唯一值,是Undefined类型的唯一值.)

现在,为实施好吃的东西:

这两种类型都表示基元,内部ToObject方法涵盖"primitiveValue.Property"的行为.(有关兔子洞的开始,请参阅GetValue/PutValue.)

9.9开始:ToObject:

抽象操作ToObject根据..将其参数转换为Object类型的值.

  • Undefined =>抛出TypeError异常.
  • Null => 抛出TypeError异常.
  • (等等)

至于注释,请参见11.4.3:typeOf运算符:

返回由Type(val)确定的字符串.

  • 未定义=>"未定义"
  • Null => "对象"
  • (等等)

  • 换句话说,问题是基于一个错误的前提:"null"和"undefined"都不是空对象. (2认同)
  • @MustafaShujaie标准对[`null`值]的描述(http://es5.github.com/#x4.3.11)可能更有用:"*表示故意没有任何对象值的原始值.*"并且,它并没有真正解释*为什么*"缺席*"仍然是一个"对象",但它确实涵盖了确定[`typeof`运算符]响应的规则(http:// es5 .github.com /#x11.4.3). (2认同)