题目
今天看到一题关于考查运算优先级的题
题目如下
console.log('Value is ' + (val != '0') ? 'define' : 'undefine');
分析
一开始做的的时候还没想到什么特别的,结果发现做错了。
在这题里,优先级高到低:括号>加号>三目运算
- 所以先执行括号内(val != ‘0’)
- 然后处理加号’Value is ’ + ()由于此处转换为布尔值为true
- 执行三目运算,由于前面为true
- 所以结果取"define"
运算优先级
参考MDN的运算符优先级
运算符优先级|MDN
总结一下我常用的,优先级从高到低:
- 圆括号 (…)
- 成员访问 … . …
- 需计算成员访问 …[…]
- 函数调用 …(…)
- 后置递增/递减 …++ / …–
- 逻辑非 !..
- 一元加减 + / - …
- 前置递增/递减 ++…/ --…
- 乘除模 * / / / %
- 加减法 … + …
- 大于小于 > / <
- 等号 … == …
- 逻辑与或/条件 … && … / … || …
- 赋值 …=…