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

时间:2013-01-15 20:26:16

标签: javascript properties null typeerror

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

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"

2 个答案:

答案 0 :(得分: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: The typeOf Operator

  

根据..

返回由Type(val)确定的字符串      
      
  • Undefined => “未定义”
  •   
  • Null =>的 “对象”
  •   
  • (依此类推)
  •   

答案 1 :(得分:2)

null是Javascript中的一个对象,表示没有对象。您无法将属性添加到任何内容。

另请参阅:Why is null an object and what's the difference between null and undefined?