JavaScript逻辑与(&&)运算符未按预期工作问题咨询
问题原因与解决方案
你遇到的这个问题是因为JavaScript中&&逻辑运算符的工作机制和你预期的不一样——它不会直接返回布尔值,而是返回第一个“假值”;如果所有操作数都是真值,就返回最后一个真值。
在你的代码里:
my_string == 'some_string'是true(属于真值)my_obj['hash']是一个非空字符串(也属于真值)
所以&&会返回最后一个真值,也就是那个hash字符串,而不是你想要的true。
想要得到布尔结果,有几种常用的解决办法:
方法1:用双重感叹号!!强制转换为布尔值
这是JavaScript里快速把任意值转成布尔值的常用技巧:第一次!把值转成布尔并取反,第二次!再取反回来,得到最终的布尔结果:
var my_string = 'some_string'; var my_obj = {'hash':'4010f89a05c236cd4f3a5c7558af0e70dc4216454d2d5155a285bfbad752ce51f9510272821a254'} console.log(!!(my_string == 'some_string' && my_obj['hash'])); // 输出 true
方法2:明确检查对象是否包含指定键
如果你只需要确认my_obj存在hash键(不管它的值是什么,哪怕是空字符串),可以用in运算符或者hasOwnProperty()方法,同时结合字符串的判断:
// 用in运算符(会检查原型链上的键) console.log(my_string === 'some_string' && 'hash' in my_obj); // 用hasOwnProperty(只检查对象自身的键,更安全) console.log(my_string === 'some_string' && my_obj.hasOwnProperty('hash'));
这里建议用===严格相等运算符代替==,避免隐式类型转换带来的意外问题。
方法3:同时检查键存在且值为真值
如果需要确保hash不仅存在,而且它的值不是空字符串、null、undefined这类假值,可以结合上面的方法:
console.log(my_string === 'some_string' && !!my_obj['hash']);
所有这些方法都能让你得到预期的布尔结果true或false,根据你的实际需求选择就好~
内容的提问来源于stack exchange,提问作者MTK
相关产品推荐
相关产品推荐

