JavaScript中console.log布尔比较输出异常问题咨询
解答你的JavaScript运算符优先级问题
嘿,作为刚从Java转过来接触JS的开发者,碰到这种运算符优先级的坑真的太常见了!我来帮你把这两个疑问拆解得明明白白:
疑问一:第二行日志为何没输出字符串部分?
这是因为运算符优先级在搞鬼!JavaScript里,字符串拼接的+运算符优先级比比较运算符>=要高。你的第二行代码:
console.log('this.props.projectData.length >= 0 : ' + this.props.projectData.length >= 0);
实际执行顺序是这样的:
- 先执行字符串拼接:
'this.props.projectData.length >= 0 : ' + this.props.projectData.length,得到完整字符串:"this.props.projectData.length >= 0 : 107" - 然后拿这个字符串和
0做>=比较 - 最后把比较的结果(false)传给
console.log,所以你只看到了false,前面的字符串根本没被打印出来!
疑问二:length为107,比较结果却为false?
接着上面的执行逻辑,当字符串和数字做比较时,JavaScript会尝试把字符串转换成数字。但你的拼接后的字符串里包含大量非数字字符(比如this.props...这些文字),转换后会得到NaN(非数字值)。而在JS里,NaN和任何值比较的结果都是false,哪怕是NaN >= 0也不例外,所以最终输出的就是false。
修正后的代码
只需要给比较表达式加上括号,强制让比较运算先执行,再和字符串拼接就行:
console.log('this.props.projectData.length: ' + this.props.projectData.length); console.log('this.props.projectData.length >= 0 : ' + (this.props.projectData.length >= 0));
这样执行后,第二行就会输出this.props.projectData.length >= 0 : true,完全符合你的预期啦!
内容的提问来源于stack exchange,提问作者Steve Waters
相关产品推荐
相关产品推荐

