X应该具有什么价值才能使这个条件起作用?
// insert code here
if (x == 1 && x === 2) {
console.log('Succes!');
}
答案 0 :(得分:4)
X应该这样定义:
Object.defineProperty(window,'x',{
get: function() {
this.__tmp = this.__tmp || 2;
this.__tmp = 3-this.__tmp;
return this.__tmp;
}
});
然后:
if( x == 1 && x === 2)
可能的工作。 Demonstration
答案 1 :(得分:1)
只有以下内容才有意义: (或getter重载,如@Niet the Dark Absol's回答所示,这不是一个纯粹的案例)x === 2
检查x
是否等于 到2
,而2
不能同时为1
。< / p>
if (x && x === 2) { ... }
答案 2 :(得分:1)
X不能同时保持一个等于1且同时为2的值,这个表达式在逻辑上是不正确的。
答案 3 :(得分:1)
以下代码应该可以解决问题(Demo here):
x = {};
x.valueOf = function (){
x = 2; // this is important
return 1;
};
if (x == 1 && x === 2) {
console.log('Success !!!');
}
<强>说明:强>
语句从左到右执行(首先是x == 1
,然后是x === 2
)。检查x == 1
时,它会转到valueOf
函数,该函数返回1
,因此它将成立。但与此同时,x
更改为2
,因此下一个要检查的语句(x === 2
)也将为真。
PS:据我所知,这没有实际应用。但是,它可以更好地理解javascript的工作原理 - 这就是这些问题的重点:)
答案 4 :(得分:0)
使用===
(标识)运算符它永远不会起作用,但是可以构造一个等于&#34;等于&#34;的对象。 (==
)同时为1和2:
x = { valueOf: function() { return this.foo ? 2 : this.foo = 1 } }
console.log(x == 1 && x == 2) // true
&#34;的valueOf&#34;是将对象转换或比较为数字时JS隐式调用的方法。
毋庸置疑,这项练习没有任何实际意义。