Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更改Javascript对象的Truthy/false值_Javascript - Fatal编程技术网

更改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