jQuery中含表达式的console.log无法正常执行问题咨询
问题解析:为啥那行console.log没输出你想要的内容
这和jQuery是不是解释型语言完全没关系,问题出在JavaScript的运算符执行顺序上:
为啥会出错
JavaScript里,字符串拼接的+号,比大于号>优先级更高。你写的:
console.log(' isGreaterThanZero :' + selectedIndex > 0);
实际执行顺序是先把' isGreaterThanZero :'和selectedIndex拼成一个字符串(比如选第一个选项时就是' isGreaterThanZero :0'),然后拿这个字符串去和0比大小。
字符串和数字比较时,JavaScript会尝试把字符串转成数字,但这个字符串开头是文字,转出来是NaN(非数字),NaN和任何数字比较的结果都是false,所以最终console.log打印的是false,不是你想要的isGreaterThanZero :true/false格式,你可能误以为它没输出。
怎么改
把比较的部分用括号包起来,强制让它先执行,再做字符串拼接:
console.log(' isGreaterThanZero :' + (selectedIndex > 0));
这样会先判断selectedIndex > 0得到布尔值,再把这个值拼到字符串后面,就能输出你预期的内容了。
关于Java的补充
你说这段逻辑用Java能正常运行,但其实Java里要是不写括号,"isGreaterThanZero :" + selectedIndex > 0直接就编译报错了——Java不允许字符串和数字比大小,这是强类型语言的特性,和优先级本身没关系。JavaScript是弱类型,会自动做隐式类型转换,所以没报错但结果不符合预期。
内容的提问来源于stack exchange,提问作者tahasozgen
相关产品推荐
相关产品推荐

