x的值应该是多少?

时间:2014-04-16 09:12:14

标签: javascript

X应该具有什么价值才能使这个条件起作用?

// insert code here
if (x == 1 && x === 2) {
     console.log('Succes!');
}

5 个答案:

答案 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)

没有这样的价值。

x === 2检查x是否等于 2,而2不能同时为1。< / p>

只有以下内容才有意义:

if (x && x === 2) { ... }

(或getter重载,如@Niet the Dark Absol's回答所示,这不是一个纯粹的案例)

答案 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隐式调用的方法。

毋庸置疑,这项练习没有任何实际意义。