js 条件判断a == ("" || undefined)的问题?

图片描述

var a = "";
if (a == ("" || undefined)) {
    a = 1;
}
console.log(a);

我一直以为这里会打印输出 1,但实际上不是,我很奇怪,直到突发奇想试试 ("" || undefined) 看它返回了undefined,很奇怪来着。

我一直以为,上面的条件判断是 a 分别与 ""undefined 比较,只要有一个符合就进行赋值,但现在看来实际上不是的,这里 a 只与 undefined 比较,这我就奇怪了,难道是 () 内先比较,然后返回一个 true 值继续和 a 比较?但是 ""undefined 都应该对应 false 啊?

求大神们解惑,谢谢!

阅读 4.9k
4 个回答

莫非你之前是学 C 语言的?

在 javascript 中,|| 的结果并不是 boolean 值,并不是 true 或者 false

https://developer.mozilla.org...

逻辑或 (||)

expr1 || expr2

如果 expr1 能转换成 true 则返回expr1,否则返回 expr2

当 expr1 为 false 时,直接返回 expr2。

a == ("" || undefined)

根据优先级,首先执行 ("" || undefined) 结果是 undefined,然后再执行 a == undefined 结果是 false


你提到的:

a 分别与 ""undefined 比较,只要有一个符合就进行赋值

这句话写出来应该是这样的:

a == "" || a == undefined

原因楼上大神已经说了。想达到你要的效果比较短的写法是["", undefined].includes(a)

对于的你的问题,jjc大大已经说的差不多了。但是我补充一点:你说的最后一句话但是 "" 和 undefined 都应该对应 false 啊? 是不对的

这一看就是没有看标准啊,按照自己的理解了

对比==这个操作符的标准是这样说的:
图片描述

  1. 如果x和y的类型一样,就去严格比较返回结果

  2. 如果x的类型是null,y的类型是undefined,返回true

  3. 如果x的类型是undefined,y的类型是null,返回true

......等等

你对比一下,你的类型一个是string一个是undefined 前几条没有符合的,就去找了最后一条,所以返回了false

Javascript中,比如一个变量a,如果判断a是不是undefined 不是用: a === "undefined"
而是用typeof a === "undefined"
好多人犯这错误啊。。

====
感谢楼下提醒,undefined加"" 。。

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