先放上mdn上关于运算符优先级关联性的汇总表 developer.mozilla.org/zh-CN/docs/…
例一:
var a =42;
var b = "foo";
var c = false;
var d = a && b || c ? c || b ? a : c && b : a;
d; //42
通过查询表格,我们可以把上面代码分解:
var d = ((a && b) || c ) ? (( c || b ) ? a :(c && b)) : a
| 6 | [逻辑与] | 从左到右 | … && … |
| 5 | [逻辑或] | 从左到右 | … || … |
| 4 | [条件运算符] | 从右到左 | … ? … : … |
逐一执行
(a && b) 结果为:''foo"
"foo" || c 结果为 :"foo"
第一个?中,"foo"为真值
(c || b)结果为:"foo"
第二个?中,"foo"为真值
a的值为42
最后结果为42
例二
var a={n:1};
var b=a;
a.x=a={n:2}
a.x; //undefined
b.x; //{n:2}