[英]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
,或继承的属性(如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"
你为什么不这样做呢?
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.