Javascript为原语赋值

Javascript为原语赋值,javascript,Javascript,如果JavaScript能够在原语和对象之间进行强制,为什么向其添加属性会导致未定义 var a = "abc"; var b = a.length console.log(b)//outputs 3 强制允许我给原语赋值吗?如果不允许,为什么?为什么不这样做 var abc=Number(3); abc.foo="bar"; abc; //3 abc.foo; //bar @Bergi真的很抱歉。我错过了新的声明。这是: var abc=new Number(3); abc.foo="b

如果JavaScript能够在原语和对象之间进行强制,为什么向其添加属性会导致未定义

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

强制允许我给原语赋值吗?如果不允许,为什么?

为什么不这样做

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

abc; //3
abc.foo; //bar
@Bergi真的很抱歉。我错过了新的声明。这是:

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

abc; //3
abc.foo; //bar
至少它能正常工作。我不知道别人还需要什么:) 原语。。。胁迫。。。废话

强制是否允许我为原语赋值

对。原语被包装在一个对象中,并在该对象上创建一个属性。不会引发任何异常

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

加法本身确实会产生值

var str = "abc";
console.log(str.someProperty = 5); // 5
然而,你所要求的是从一个原语中得到一个属性。这将在
undefined
中返回,因为原语被包装在新的包装对象中,而不是您为其分配属性的对象:

console.log(str.someProperty); // undefined
它仅适用于使用对象创建的特殊属性,如
.length
,或继承的属性,如
slice
charAt
方法(有关这些属性,请参阅)

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

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"

我想你实际上要问的是‘强制是否允许我为原语的属性赋值?’,而不是原语本身。下面@Maizere的答案也是如此。