Javascript将值赋给基元

时间:2013-07-18 15:08:44

标签: javascript

如果JavaScript很容易在基元和对象之间强制转换,为什么向它添加属性会导致未定义?

var a = "abc";
var b = a.length
console.log(b)//outputs 3

强制是否允许我为原语分配值?如果没有原因?

2 个答案:

答案 0 :(得分:1)

  

强制是否允许我为基元分配值?

是。原语包装在一个对象中,并在其上创建一个属性。不会抛出异常。

  

为什么向它添加属性会导致未定义?

添加本身会产生值。

var str = "abc";
console.log(str.someProperty = 5); // 5

然而,你所要求的是从原始人那里获得财产。这将在undefined中返回,因为基元包含在 new 包装器对象中 - 而不是您为其分配属性的对象:

console.log(str.someProperty); // undefined

它仅适用于使用对象创建的.length等特殊属性,或者slicecharAt方法等继承的属性(请参阅the docs)。< / p>

如果你想要这样的东西,你需要明确地创建包装器对象并将其存储在某个地方:

var strObj = new String("abc");
strObj.someProperty = 5;
console.log(strObj.someProperty); // 5
// coercion and the `toString` method will even make the object act like a string
console.log(strObj + "def"); // "abcdef"

答案 1 :(得分:0)

你为什么不这样做?

var abc=Number(3);
abc.foo="bar";

abc; //3
abc.foo; //bar
确实,对@Bergi,对不起。我错过了new声明。这是:

var abc=new Number(3);
abc.foo="bar";

abc; //3
abc.foo; //bar

至少它的工作正常。我不知道还有什么人可能需要:) 原始......胁迫......等等。