我认为如果语句不应该包含赋值运算符而是包含比较运算符(==,===),但这非常有效。为什么呢?
var foo = true,
bar = true;
if (foo = true) {
console.log('foo is true');
}
我被告知这不行,但我发现它确实有效。
答案 0 :(得分:6)
你实际上在做什么,仍然在比较:
if ((foo = true) == true) ...
这是“缩写”:
foo = true;
if (foo == true) ...
所以它确实有意义=)!
答案 1 :(得分:5)
从ES5.1规范(12.5)
IfStatement :
if ( Expression ) Statement else Statement
if ( Expression ) Statement
任何有效的表达式都可以放在if。
中 foo = true
是一个表达式,它的计算结果为真。
为避免将来编写=
而不是==
等错误,请将其写为
if (true = foo) {
}
由于您无法将值分配给true
答案 2 :(得分:3)
赋值被评估为true
,因为JavaScript返回它将变量设置为的值。
var foo = true,
bar = true;
if (foo = true) {
console.log('foo is true');
}
变为:
var foo = true,
bar = true;
if (true) {
console.log('foo is true');
}
传递if
。请注意,设置为false
不起作用,因为条件将评估为false
,但未通过if
。
关于if
:
if(Expression)Statement
您正在使用作业表达式:
AssignmentExpression: ConditionalExpression LeftHandSideExpression AssignmentOperator AssignmentExpression
=
指定为:
简单分配(=)
生产AssignmentExpression:LeftHandSideExpression = AssignmentExpression评估如下:
...
2。设rref是评估AssignmentExpression的结果。
3。设rval为GetValue(rref)。
...
<强> 6。返回rval。
答案 3 :(得分:1)
可悲的是,你实际上是将foo指定为true。 :)