var test = new Boolean(0)
test.prop = "OK!"
你能把test
的值改成true
吗?
但是 test.prop
应该仍然是“OK!”
换句话说,test
应该是同一个对象
最佳答案
内置对象包装器(使用 Boolean
、Number
、String
和 Date
构造函数创建)存储名为 [[PrimitiveValue]]
的内部属性中的原始包装值,无法更改,但是...
您可以覆盖test
对象的valueOf
方法:
var test = new Boolean(0);
test.prop = "OK!"
// override valueOf:
test.valueOf = function () { return true; };
if (test == true) { // using the equals operator explicitly for type conversion
alert(test.prop); //"OK!"
}
它将起作用,因为 valueOf
方法由等于运算符触发的类型转换机制在内部使用。
当其中一个操作数是 bool 值时,两者都在最后转换为数字。
如果我们不使用等于运算符(例如 if (test) { ... }
),因为 test
是一个对象,当直接转换为 bool 值时,它将始终产生 true
。
任何转换为 bool 值的对象都会产生 true
值,唯一可以产生 false
结果的值是“假”值(null
、undefined
、0
、NaN
、空字符串,当然还有 false
值),任何其他都会产生 true
。
更多信息:
关于javascript - 更改包装的原始数据类型的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4066094/