javascript - 更改包装的原始数据类型的值

标签 javascript types object

var test = new Boolean(0)
test.prop = "OK!"

你能把test的值改成true吗?

但是 test.prop 应该仍然是“OK!”

换句话说,test应该是同一个对象

最佳答案

内置对象包装器(使用 BooleanNumberStringDate 构造函数创建)存储名为 [[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 结果的值是“假”值(nullundefined0NaN、空字符串,当然还有 false 值),任何其他都会产生 true

更多信息:

关于javascript - 更改包装的原始数据类型的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4066094/

相关文章:

c++ - 强制枚举为无符号长类型

c# - 如何检查类 "is"是否是 C# 中作为变量给出的类型的实例?

javascript - 使用正则表达式将 JS 中的大字符串文字解析为对象数组

javascript - 如何为多个输入加载具有不同日期范围的日期时间选择器

javascript - D3 如何在ID中有点时按ID选择元素

javascript - 从 v3 迁移到 v4 - 工具提示未显示在 d3 中

haskell - 构造延续类型?

java - 为什么将 arrayList 对象输出到 JtextArea 的尝试不起作用?

java - Java中如何将Object的属性值转换为数组?

javascript - 设置CSS的背景图片:before tag programatically