为基元赋值的Javascript

Javascript assigning value to primitive

本文关键字:Javascript 赋值      更新时间:2023-09-26

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

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

强制是否允许我为基元赋值?如果不是,为什么?

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

是的。基元被包裹在一个对象中,并在该对象上创建一个属性。不会引发任何异常。

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

加法本身确实会产生值。

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

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

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

它只适用于与对象一起创建的特殊属性,如.length,或继承的属性,如slicecharAt方法(请参阅文档)。

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

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"

为什么不这样做?

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

@贝吉真的很抱歉。我错过了new声明。这是:

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

至少它工作得恰到好处。我不知道别人还需要什么:)基元。。。强迫等等。