最后那个 0 == false 的例子确实是js相关的,不是蠢问题。
在js标准里==操作符的算法基本就是查表,规则可以有逻辑性,也可以没有逻辑性。每一种情况都是当特例处理的。从你的描述看,估计你误以为0==false是把false隐式转换成了number再比较。实际上不是这样的。js标准看到左边是number右边是boolean,就去规则库里找到量相应的规则:“number和boolean在==比较时,把false当0再比”,并执行的。
换个说法:0==false之所以结果是true,并不是像c那样根据优先级cast然后根据语义算出来,纯粹是因为js发明人选择了true。
btw他还选择了0===false结果是false。。
【 在 eGust (十年) 的大作中提到: 】
: 因为不是做完一道题出答案,而是全做完了再出,而且选完之后不能退回去,所以个人建议做题之前先体验一下都有哪些蠢问题。
: 0.1 + 0.2 == 0.3
: 1/0 跟 Infinity 做比较
: 0/0
: NaN == NaN
: !!true
: 逗号表达式 (m, n) 的结果
: 1 + true
: 0 == false
: 一共25道题,这类蠢问题没有一半也有1/3了,而且好几道题实际上是重复的。3天前刚做过,细节可能会有出入。
: 这些问题基本上拿到任何一门支持浮点数的语言,支持 bool 转换成 int 类型的语言里都是完全一样的,看到 !!true 的时候简直辣眼睛。反正我做完之后是觉得后悔的,在一个小白出的题上面浪费了许多时间。
--
FROM 101.84.136.*