说if("0")返回的是true,稍微有点基础的程序员都是认可的,因为有内容的字符串都是true,也很少有人因此犯低级错误。

if("0"){
alert("哦哦");
}

但是如果0是由其他地方掉下来的,那情况就稍微复杂了,譬如在一堆选项里:[“0”,“1”,“2”,1,2,3]里面就可能会出现直接将if("0")当做true来处理的遗漏,因为你想当然认为给你的选项都是数字。看下面的例子:

<select class="form-select form-control" name="mode" id="mode" onchange="onConfigChange(this)">
<option value=0>NO</option>
<option value=1>YES</option>
</select>
<script>
function onConfigChange(ele){
var ele = document.getElementById("mode");
var index= ele.selectedIndex;
var mode = ele.options[index].value;
if(mode){
alert("YES");
}
}

</script>

你可能会觉得只有选到1时才会出现YES提示,而事实是无论你选哪个,都会出现YES提示。这是因为HTML规范里,select选项并不能直接返回给你一个数字,而是以字符串返回。

更多的时候,字符形式数字的来源不仅仅是网页dom里,从接口,从回调,从json值里等等,都可能返回给你字符串形式的“数字”。

除了在判断逻辑里,在使用这些值时也是要慎重对待的,因为数字和字符串在使用上毕竟差别万千,不管实在低级语言里,还是在类型不是很敏感的高级语言里。