更改Javascript对象的Truthy/false值
基本上我可以做以下更改Javascript对象的Truthy/false值,javascript,Javascript,基本上我可以做以下 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 execute
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
}
我为什么要这么做?因为我很好奇:不,你不能。您必须实现一些自定义逻辑。您可以使用loose equal将其与布尔值进行比较。人们总是这样做,最后它起到了一定的作用
var obj = {valueOf: function() {return !this.falsey;}};
obj.falsey = true;
if (obj == true) {
//code not executed
} else if (obj == false) {
//code executed
}
您可以借用假数字
,布尔值
。。。。从iframe开始,并扩展其原型
基本上,以下方法不起作用,因为数字是一个基本值
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);
最终,这不是一个好主意。嗯,嗯……你必须这样做:epicif(obj)
,然后它就会工作。:)<代码>!!obj
既不调用obj.valueOf()
也不调用obj.toString()
@Robert it过去的工作方式他们可能采用了新的标准没有错误的Number
s或Boolean
s。我也不明白借用不同的物品会有什么不同。@Robert我不明白你的问题。您可以扩展Number.prototype,但不能向对象添加自定义属性。从理论上讲,你可以从iframe中借用一个数字,我可以发布一个例子,但可能不值得这么做,因为这样做会让人讨厌,坦白说真的很奇怪。我的意思是,你可以轻松地向Number
对象添加自定义属性,比如x=newnumber(0);x、 测试='yo'代码>。另一方面,扩展Number。不同iframe的原型根本不会影响当前帧的Number原语。@Robert您必须执行x=NumberNewiframe(0)
尝试检索x。测试它在您的示例中不起作用。x=NumberNewiframe(0)
只返回一个普通的Number原语。没有连接到附加的NumberNewiframe.prototype
,因此alert(x.test)
将提醒undefined
,因为它从当前上下文的未修改的Number
构造函数创建了一个临时对象,该构造函数没有test
属性。但是使用new
关键字x=newnumber(0)
实际上创建了一个可以修改的持久对象,因此x.test='yo';警报(x.test)
警报yo
。