空数组使用三元运算符的逻辑和空字符串/0有什么不同?

console.log([] == false)
true                 

console.log([]?true:false)
true
 
console.log('' == false)
true

console.log(''?true:false)
false

console.log([] == '')
true

符号 等于三元运算符 的判断逻辑不等价吗?三元运算符的判断规则是什么?

阅读 3.6k
3 个回答

参考JS相等性判断里梳理的a == b的逻辑:

  1. 相同类型的直接判断值(同===);
  2. null和undefined值不会发生类型转换,但是null==undefinedtrue;
  3. 对象先转成基本类型参与==比较;
  4. 基本类型都转成Number进行比较,即String和bool不会互转,都会统一转成Number。

对照这个规则可以解释上面的行为。

  • js中使用 "==" 包含隐式转换的, 而三元运算符没有。这应该是造成你疑惑的地方;
  • 另外,判断的时候 推荐使用 "===" 来判断,会少很多不必要的麻烦

三元运算符 中不包含 隐式转换
就只是 truthy(真值)的判断
在 JavaScript中,truthy(真值)指的是在布尔值上下文中,转换后的值为真的值。所有值都是真值,除非它们被定义为 假值(即除 false0""nullundefinedNaN 以外皆为真值)。
参见 MDN

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题