首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改Javascript对象的Truthy/False值

更改Javascript对象的Truthy/False值
EN

Stack Overflow用户
提问于 2011-07-12 04:10:33
回答 3查看 971关注 0票数 4

基本上我可以做以下事情……

代码语言:javascript
复制
var obj = {}:
obj.falsey = true;
if(obj){
   //code not executed
}else{
   //code executed
}

我可以利用!+~..。调用valueOf/toString并执行以下操作,但我希望避免这种情况。

代码语言:javascript
复制
var obj = {valueOf:function(){return 0}}:
obj.falsey = true;
if(!!obj){
   //code not executed
}else{
   //code executed
}

我为什么要这样做呢?因为我很好奇:

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-20 05:28:15

你可以借一个假的NumberBoolean...并扩展其原型。

基本上,下面的代码不起作用,因为数字是一个原始值。

代码语言:javascript
复制
var x = 0;
x.test = 'yo';
console.log(x.test);

确实如此,但是很明显这会污染Number.prototype,所以你真的应该从另一个iframe中借用一个不同的Number对象。

代码语言:javascript
复制
var x = 0;
Number.prototype.test = 'yo';
console.log(x.test);

归根结底,这不是一个好主意。

票数 0
EN

Stack Overflow用户

发布于 2011-07-12 04:13:03

不,你不能。你必须实现一些自定义逻辑。

票数 3
EN

Stack Overflow用户

发布于 2011-07-12 04:35:27

您可以使用loose equal将其与布尔值进行比较。人们一直都在这样做,最后它还是有了一些目的。

代码语言:javascript
复制
var obj = {valueOf: function() {return !this.falsey;}};
obj.falsey = true;
if (obj == true) {
   //code not executed
} else if (obj == false) {
   //code executed
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6655914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档