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