简单理解JS的&&和||

本文只针对&&||的行为进行一个理解,真实情况下JS引擎是不是这么做的我并没有考察

知识铺垫

在讲&&||之前,我们需要了解一个函数Boolean

它的行为如下:

  • 返回为true的:
  1. Boolean(true)
  2. Boolean(非空字符串类型)
  3. Boolean(非零非NaN数字类型(包括Infinity))
  4. null的结果为false
  5. undefined的结果为false
  6. Boolean(任何对象类型)
  • 返回为false的参数:
  1. Boolean(false)
  2. Boolean(空字符串)
  3. Boolean(0或者NaN)
  4. Boolean(null)
  5. Boolean(undefined)
  6. 对象类型的结果为true

其实就是if(...)里面的隐式转化逻辑,但是实际上这里在隐式转化时用的方法是不是就是Boolean我还没有深究,欢迎评论补充。

回到正题

其实这两个符号就是一个短路运算符,它的作用是返回一个操作数,规则如下:

对每个操作数进行Boolean():

  • 对于||

    从左到右找Boolean()返回为true的操作数,如果能在最后一个||之前找到返回为true的操作数,就返回这个操作数然后结束,否则,返回最后面的操作数

  • 对于&&

    从左到右找Boolean()返回为false的操作数,如果能在最后一个&&之前找到返回为false的操作数,就返回这个操作数然后结束,否则,返回最后面的操作数

其实这个规则也适用于我们一般遇到的逻辑判断:

true || false

true || true

false || true

false || false

true && false

true && true

false && true

false && false

以上均在V8非严格模式测试,欢迎评论区交流、批评、指正

你可能感兴趣的:(前端,javascript,js)