JS逻辑运算符 与&&、或||解析

问题

今天温习了w3schoolJavascript高阶教程ECMAScript Boolean 运算符 http://www.w3school.com.cn/js/pro_js_operators_boolean.asp
在看到逻辑 AND 运算符:

如果某个运算数不是原始的 Boolean 型值,逻辑 AND 运算并不一定返回 Boolean 值

然后它列举了几个规则,其中第一条:

如果一个运算数是对象,另一个是 Boolean 值,返回该对象。

然后我就在控制台想用代码敲一边,发现了矛盾的地方:

声明一个对象 var a=new Object()a && true的结果是true,而非教程里说的返回该对象。只有true && a才能返回a对象:
在这里插入图片描述
这里就 逻辑 AND 运算符 的规则做一个说明和记录,如果有不对的,还望大家不吝赐教。

逻辑值对照表

ECMAScript-262 v5 规范中描述的 ToBoolean 操作, 将其参数按照下表中的规则转换为逻辑值:

参数类型逻辑值结果
Undefinedfalse
Nullfalse
Boolean结果等于输入的参数(不转换)
Number如果参数为 +0, -0 或 NaN,则结果为 false;否则为 true。
String如果参数为 空字符串,则结果为 false;否则为 true。
Objecttrue

这个表格下面要用到。

逻辑 AND 运算符

逻辑 AND 运算符用双和号(&&)表示:a && b

逻辑 AND 运算的运算数可以是任何类型的,不止是 Boolean 值。

如果某个运算数不是原始的 Boolean 型值,逻辑 AND 运算并不一定返回 Boolean 值

因为逻辑 AND的运算规则为同真才真,一假则假,所以逻辑 AND 运算处理过程应该是这样的:

  • 先判断第一个运算数逻辑值(运算数的逻辑值参考上面的表格,比如运算数为对象,逻辑值为true)。
    如果该逻辑值为false,根据一假则假,该逻辑运算结果肯定为false,则不再继续计算后面的运算数,直接返回第一个运算数本身(而不是其逻辑值,即如果第一个运算数是字符串就返回字符串,对象就返回对象,是数字就返回数字,是undefined就返回undefiend,是boolean值就返回booolean)。
    这种情况 真正参与 逻辑计算的只有第一个运算数,故它是真正参与此次逻辑运算的第一个也是 最后一个 运算数。

  • 如果第一个运算数的逻辑值为true,根据 同真才真,还不能确定逻辑运算结果,则 继续运算 ,这里如果只有两个运算数,实际上不再判断第二个运算数的逻辑值,而是直接返回 第二个运算数本身
    这种情况两个运算数都参与逻辑计算,返回第二个运算数也就是 真正参与此次逻辑运算的最后一个运算数本身

    • 如果直接打印(console.log),那么输出的就是第二个运算数本身,
    • 如果是个if判断,则在if里再根据返回的这个第二个运算数本身的逻辑值来判断(如下图)在这里插入图片描述
  • 上面具体说明了两个运算数的逻辑 AND 运算,如果是多个规则不变,以此类推。

综上所述 : 逻辑 AND 运算,在同真才真,一假则假的原则上, 总返回真正参与逻辑运算的最后一个运算数本身(而不是其逻辑值)

逻辑 OR 运算符

同理,对于逻辑 OR 运算,在一真则真,同假才假的原则上, 总返回真正参与逻辑运算的最后一个运算数本身(而不是其逻辑值)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值