基本上我可以做以下事情……
var obj = {}:
obj.falsey = true;
if(obj){
//code not executed
}else{
//code executed
}我可以利用!,+,~..。调用valueOf/toString并执行以下操作,但我希望避免这种情况。
var obj = {valueOf:function(){return 0}}:
obj.falsey = true;
if(!!obj){
//code not executed
}else{
//code executed
}我为什么要这样做呢?因为我很好奇:
发布于 2011-07-20 05:28:15
你可以借一个假的Number,Boolean...并扩展其原型。
基本上,下面的代码不起作用,因为数字是一个原始值。
var x = 0;
x.test = 'yo';
console.log(x.test);确实如此,但是很明显这会污染Number.prototype,所以你真的应该从另一个iframe中借用一个不同的Number对象。
var x = 0;
Number.prototype.test = 'yo';
console.log(x.test);归根结底,这不是一个好主意。
发布于 2011-07-12 04:13:03
不,你不能。你必须实现一些自定义逻辑。
发布于 2011-07-12 04:35:27
您可以使用loose equal将其与布尔值进行比较。人们一直都在这样做,最后它还是有了一些目的。
var obj = {valueOf: function() {return !this.falsey;}};
obj.falsey = true;
if (obj == true) {
//code not executed
} else if (obj == false) {
//code executed
}https://stackoverflow.com/questions/6655914
复制相似问题