JavaScript 逻辑运算符 || 和 &&

一、先来说说 ||(逻辑或), 从字面上来说,只有前后都是 false 的时候才返回 false,否则返回 true。

alert(true||false);       // true
alert(false||true);       // true
alert(true||true);        // true
alert(false||false);      // false

但是,从深层意义上来说的话,却有另一番天地,试下面代码

alert(0||1);

显然,我们知道,前面 0 意味着 false,而后面 1 意味着 true,那么上面的结果应该是 true,而事实返回的结果是 1。再看下面代码:

alert(2||1);

我们知道,前面 2 是 true,后面 1 也是 true,那返回结果又是什么呢?测试结果是 2,继续看:

alert('a'||1);

同样,前面 'a' 是 true,后面 1 也是 true;测试结果是 'a',下面

alert(''||1);

由上,我们知道前面 '' 是 false,后面 1 是 true,而返回结果是 1。再看下面

alert('a'||0);

前面 'a' 是 true,而后面 0 是 false,返回结果是 'a',继续下面

alert('a'||'b');

前面 'a' 是 true,后面 'b'是 false,返回结果是 'a',我们继续下面

alert(''||0);

前面 '' 是 false,后面 0 同样是 false,返回结果是0

alert(0||'');

前面0是false,后面''是false,返回结果是''

这就意味:

  • 1、只要 || 前面为 false,不管 || 后面是 true 还是 false,都返回 || 后面的值。
  • 2、只要 || 前面为 true,不管 || 后面是 true 还是 false,都返回 || 前面的值。

二、下面说说 &&(逻辑与), 从字面上来说,只有前后都是 true 的时候才返回 true,否则返回 false。

alert(true&&false);      // false
alert(true&&true);       // true
alert(false&&false);     // false
alert(false&&true);      // false

然后,根据上面经验,我们看看 && 号前后,不单单是布尔类型的情况。

alert(''&&1);

结是返回 '', && 前面 '' 是 false,后面是 1是 true。

alert(''&&0);

结是返回 '', && 前面 '' 是 false,后面是 0 也是 false。

alert('a'&&1);

结是返回 1, && 前面 'a' 是 true,后面是 1 也是 true。

alert('a'&&0);

结是返回 0, && 前面 'a' 是 true,后面是 0 是 false。

alert('a'&&'');

结是返回 '', && 前面 'a' 是 true,后面是 '' 是 false。

alert(0&&'a');

结是返回 0, && 前面 0 是 false,后面是 'a' 是true。

alert(0&&'');

结是返回 0, && 前面 0 是 false,后面是 '' 也是false。

这意味着

  • 1、只要 && 前面是 false,无论 && 后面是 true 还是 false,结果都将返 && 前面的值;
  • 2、只要 && 前面是 true,无论 && 后面是 true 还是 false,结果都将返 && 后面的值;

让我们总结一下:

  • 1、只要 || 前面为 false,无论 || 后面是true还是 false,结果都返回 || 后面的值。
  • 2、只要 || 前面为 true,无论 || 后面是true还是 false,结果都返回 || 前面的值。
  • 3、只要 && 前面是 false,无论 && 后面是true还是 false,结果都将返 && 前面的值;
  • 4、只要 && 前面是 true,无论 && 后面是true还是false,结果都将返 && 后面的值;

由上两个测试可知,逻辑运算符, || 和 && 都是遵行短路原则,只要确定符号前面的真假,既可确定返回值。

需要说明的是 && 的优先级是高于 || 的,下面测试:

alert(1||'a'&&2);

返回结果是1。

根据反证原理,我们假设 || 的优先级不低于 && (这里只所以用"不低于",是为了同时证明等级相同的情况)。

根据上面我们得出的结论(1),(1||'a')将返回前面的值1,(1&&2)根据结论(4)应该返回后面的值2。这显然不对,由此可知 && 的优先级是高于 || 的。

来源地址:http://www.cnblogs.com/pigtail/archive/2012/03/09/2387486.html

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
  1. 免费下载或者VIP会员资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
  2. 提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。 若排除这种情况,可在对应资源底部留言,或联络我们。
  3. 找不到素材资源介绍文章里的示例图片?
    对于会员专享、整站源码、程序插件、网站模板、网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
  4. 付款后无法显示下载地址或者无法查看内容?
    如果您已经成功付款但是网站没有弹出成功提示,请联系站长提供付款信息为您处理
  5. 购买该资源后,可以退款吗?
    源码素材属于虚拟商品,具有可复制性,可传播性,一旦授予,不接受任何形式的退款、换货要求。请您在购买获取之前确认好 是您所需要的资源

评论(0)

提示:请文明发言