有人可以解释为什么下面的代码不会给出错误:
var x;
false ? null : x = 1;
根据MDN-operator precedence,conditional operator的运算符优先级高于assignment operator,这意味着上面的代码应该给出错误,因为它实际上是这样解析的:
var x;
(false ? null : x) = 1
但是它没有给出错误,但是可以正常工作:
var x;
x = 1 ? alert(x) : null;
上面的代码解析如下:
var x;
x = (1 ? alert(x) : null);
因为条件运算符的优先级更高,但是为什么在我的第一个代码中,如果条件运算符的优先级高于赋值运算符,为什么它不会给出错误?
因为条件运算符的优先级比赋值运算符的优先级高,所以您的第一个块实际上是
var x;
(false ? null : x ) = 1;
[(false ? null : x )
变为x
,所以整个块变为
var x;
x = 1;
如果为(true ? null : x )
,则将引发错误。