提问人:Efe Zeybek 提问时间:9/7/2019 更新时间:9/7/2019 访问量:1542
如何将布尔对象分配给值?
How do I assign a boolean object to a value?
问:
我正在研究布尔对象的工作原理。它不能用作参考值转移。因为该值无法更改。使用新运算符有什么用?这个问题可以通过自己创建一个新的布尔对象来解决。但这并不能回答一个问题,为什么布尔对象中没有集合函数?创建一个布尔对象对我来说毫无意义。因为你什么都做不了。除了创建新对象之外,还有其他解决方案吗? Boolean 对象有什么作用?
let bool=true;
let boolObj=new Boolean(true);
let ref=boolObj;
//set booObj false
console.log(ref.valueOf());//expected out:false
答:
除了创建新对象之外,还有其他解决方案吗?
如果问题是你想要一个具有可变布尔状态的对象,那么是的,这就是解决方案:
const boolObj = {flag: true, valueOf() { return this.flag; }};
boolObj.flag = false;
console.log(boolObj.valueOf());
请注意,它使用 ,而不是 。后者将存储在 中,而不是修改对象的状态。boolObj.flag = false;
boolObj = false;
false
boolObj
使用新运算符有什么用?
几乎没有任何理由创建对象。 对象,就像所有原始包装器对象一样,是不可变的。它们的主要目的是提供一种规范机制,通过该机制可以在基元上调用“方法”:Boolean
Boolean
const b = false;
console.log(b.toString()); // "false"
b
是原语,怎么会有方法呢?答案是:不能。但是当 JavaScript 引擎看到 时,它会将原语“提升”为等效对象,然后从该等效对象中获取方法。(从理论上讲,显然,引擎会尽可能地优化对象创建。对于内置方法来说,这并不意味着什么,但您可以添加方法。在 ES5 的严格模式之前,这意味着必须有一个原语的对象表示:b.toString
Object.defineProperty(Boolean.prototype, "example", {
value() {
console.log("typeof this = " + typeof this);
return !this;
},
configurable: true,
writable: true
});
false.example();
这是必要的,因为在 ES5 的严格模式之前,它总是必须是类型(或对对象的引用),它不能是原语。从 ES5 的严格模式开始,被允许为原语:this
"object"
null
this
"use strict";
Object.defineProperty(Boolean.prototype, "example", {
value() {
console.log("typeof this = " + typeof this);
return !this;
},
configurable: true,
writable: true
});
false.example();
我在上面说“几乎从不”,因为对象有一个用例,但它不是一个很好的用例:三态标志。您可以用于不确定状态、真实状态和虚假状态。不过,这并不是一个很好的用例。:-)Boolean
null
new Boolean(true)
new Boolean(false)
评论