为什么'x==x++;`true和'x++;==Javascript中的x`false?
您能解释一下这两种逻辑操作之间的区别吗:为什么'x==x++;`true和'x++;==Javascript中的x`false?,javascript,Javascript,您能解释一下这两种逻辑操作之间的区别吗: 设x=1; console.log('x='+x); log('x==x++:'+(x==x++); x=1; console.log('x='+x); log('x++==x:'++(x++==x))x===x++:首先比较x和x,然后比较x++ x++==x:首先是x++然后将x++的结果与x比较x++是一个后增量运算符,它基本上已经将x的值放入,然后将其增量为1。 在第一种情况下,x===x++。它表明,1===1,而在第二种情况下,x++==x
设x=1;
console.log('x='+x);
log('x==x++:'+(x==x++);
x=1;
console.log('x='+x);
log('x++==x:'++(x++==x))代码>x===x++:首先比较x和x,然后比较x++
x++==x:首先是x++然后将x++的结果与x比较x++是一个后增量运算符,它基本上已经将x的值放入,然后将其增量为1。
在第一种情况下,x===x++
。它表明,1===1
,而在第二种情况下,x++==x
,x的值在比较之前增加,因此它变为1===2
,这当然是错误的。有趣
在第二种情况下,x++
被计算为1
,然后它增加x
(变为2)。因此比较结果是1==2
这是基本的计算机科学,x++
意味着使用然后更新
x = 1;
x === x++
这里的x值在比较结束后改变
x++ === x
开始时,x++值保持为1,但一旦执行===后,x的值将变为2。后缀增量(y=x++
)确实增加了值,但计算结果为其先前的值。它几乎等于:
x² = x; // evaluate previous value of x
x += 1; // increase x
y = x²; // use previous value
因此,x===x++
等于:
// evaluate left side of ===
x¹ = x;
// evaluate right side
x² = x;
// ++
x += 1;
// comparison
x¹ === x² // true
wereasx++==x
是:
// evaluate left side
x¹ = x;
// ++
x += 1;
// evaluate right side
x² = x; // x was already incremented!
// comparison
x¹ === x²
x===x++
这里,在比较之前,x=1
,因此返回true
x++==x
这里,由于运算符优先级,
这等于x==++x
,其中x递增,因此返回false。发生这种情况是因为递增运算符的顺序(在变量之前或之后)很重要
使用x++
将首先返回变量,然后对其进行递增,而使用++x
将首先对其进行递增,然后返回结果
例如:
x = 0;
console.log(x++, x); // 0, 1 (first return the variable then increment)
console.log(++x, x); // 2, 2 (first increment then return the variable)
在第一次比较中,在所有变量的使用之后,您将递增它:
x = 0;
// 0 === 0
x === x++
在第二次比较中,首先使用x值,然后增加它并与新的x值进行比较:
x = 0;
// 0 === 1
x++ === x
这是因为值x在再次读取之前增加,因此x++==x为假,x==x++为真。
还有一个看起来几乎相同的操作符++x,它立即递增变量
设x=0;
console.log(x++)//0
控制台日志(x)//1.
设y=0;
console.log(++y)//1.
控制台日志(y)//1
在javascript中求值=
运算符时,它首先求值左操作数,然后求值右操作数,最后进行比较。看
并且,当计算x++
时,x
的值改变,x++
的结果是x
的原始(未改变)值
因此,在x===x++
中,x
和x++
都求值为x
的原始值,x
的值在此之后发生变化。因此结果是true
在x++==x
中,当计算左x++
时,会更改x
的值,左操作数计算为原始值。但右操作数在这之后发展,因此它的计算结果为x
的更改值。因此结果是false
首先,我假设表达式是从左到右计算的,请参见下面的演示:
console.log('(1==2)==2-左前-',(1==2)==2)
log('1==(2==2)-右首-',1==(2==2))
console.log('1==2==2-与左前相同-',1==2==2)
运算符++可以放在变量后面。
当运算符在变量后面时,它是“后缀形式”:x++
“前缀形式”是指运算符在变量++x之前
设x=1;
console.log('x='+x);
//打印x=1
log('x==x++:'+(x==x++);
//(x==x++)这意味着
//(1 === 1)
//真的
x=1;
console.log('x='+x);
//打印x=1
log('x++==x:'++(x++==x));
//(x++==x)这意味着
//(1==2)的工作原理与x=x+1相同,但更短
//false
此选项无法回答问题。编译器为什么要这样做?编译器从左到右执行代码,然后按照我说的做