繁体   English   中英

Javascript为基元赋值

[英]Javascript assigning value to primitive

如果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

确实,@ Bergi,对此感到抱歉。 我错过了new声明。 这里是:

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

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

至少它是正确的。 我不知道其他人可能还需要什么:)原语...强制...等等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM