JavaScript表达式求值困惑:为何判断结果不符合预期?
为啥你的表达式输出false?
嘿,这问题我刚入门JavaScript的时候也踩过同款坑!核心原因是运算符优先级在搞鬼。
你写的表达式:
console.log('isSuperAdmin ' + user.user_role === "SUPER_ADMIN");
JavaScript会先执行优先级更高的字符串拼接操作,也就是先算 'isSuperAdmin ' + user.user_role,得到字符串 'isSuperAdmin SUPER_ADMIN'。然后再拿这个长字符串和 "SUPER_ADMIN" 做全等比较(===),这俩显然不一样,所以结果就是false。
而你在开发者工具里单独看 user.user_role === "SUPER_ADMIN" 时,因为没有拼接干扰,自然会返回true。
正确的写法有两种:
给比较部分加括号,强制让它先执行:
console.log('isSuperAdmin ' + (user.user_role === "SUPER_ADMIN"));这样会先算出
user.user_role === "SUPER_ADMIN"的结果true,再和字符串拼接,最终输出isSuperAdmin true。用ES6的模板字符串(更推荐,可读性更高):
console.log(`isSuperAdmin ${user.user_role === "SUPER_ADMIN"}`);模板字符串里的
${}会先计算内部表达式的值,再嵌入到字符串中,结果和上面一致。
内容的提问来源于stack exchange,提问作者sanbhat
相关产品推荐
相关产品推荐

