为什么设置一个你无法获得的财产是合法的?

时间:2014-01-28 20:20:59

标签: javascript getter-setter

我想理解为什么允许在字符串或其他原语上分配属性,即使javascript从不存储该值。我知道“xyz”与Object(“xyz”)不同,但是看看这里

var o = "xyz";
o.value = "foo bar";
alert(o.value); // alerts "undefined"

value属性在分配后立即保持未定义状态。 当o是一个对象时,value属性被正确分配并在alert语句中返回。 当o未定义时,分配属性会导致TypeError。 但是当o是一个字符串时,根本没有任何事情发生,分配就被忽略了。 好吧,在我的例子中,o是一个变量,而且“xyz”.value =“foo bar”是完全合法的吗?

1 个答案:

答案 0 :(得分:4)

字符串不是对象。这样:

 o.value = "foo bar";

表示:

  1. 将字符串值“o”转换为String实例
  2. 将该实例的属性“value”设置为“foo bar”
  3. 抛弃String对象。