由一道题目引出的JavaScript中运算符的优先级问题

引自牛客网(https://www.nowcoder.com/)的一道问题:

假设val已经声明,可定义为任何值。则下面js代码有可能输出的结果为:
console.log('Value is ' + (val != '0') ? 'define' : 'undefine');
A、Value is define
B、Value is undefine
C、define
D、undefine
E、Value is define 或 Value is undefine
F、define 或者 undefine
G、其他选项均有可能

乍一看此题,并没有get到出题者的考察用意,因此很容易粗心选出错误答案,细细想来才明白这道题考察的其实是关于JavaScript中的运算符问题。由于示例代码中的“ ? : ”运算符优先级远小于“+”运算符的优先级,因此代码应该解读为:
['Value is ' + (val != '0')] ? 'define' : 'undefine' ,很显然,“?”前面的一部分包含字符串,布尔值一定为true,因此此段代码运行的结果就是 C选项 define。

下表摘自网络(最初作者不详):
运算符 描述
. [] () 字段访问、数组下标、函数调用以及表达式分组
++ -- - ~ ! delete new typeof void 一元运算符、返回数据类型、对象创建、未定义值
* / % 乘法、除法、取模
+ - + 加法、减法、字符串连接
<< >> >>> 移位
< <= > >= instanceof 小于、小于等于、大于、大于等于、instanceof
== != === !== 等于、不等于、严格相等、非严格相等
& 按位与
^ 按位异或
| 按位或
&& 逻辑与
|| 逻辑或
?: 条件
= oP= 赋值、运算赋值
, 多重求值

由此表可见,:“?:”运算符在优先级中处于较后的位置,因此代码中若想运用此运算符,一定要用优先级别最高的“()”运算符来进行辅助运算,以达到最初目的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值