迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 >

Js 中 && 运算的那些事

作者:迹忆 最近更新:2022/11/13 浏览次数:

今天女友qq头像闪个不停,点开一看着实使我吃了一惊。只见上面写着这样两行js代码:
 

var num=(7<10&&10);
alert(num);


问题是这样的,这个 num 为啥是10 而不是 true或者1?
 

(在这里向各位博友说明一下, 本人女友是做前端的,现正在学习javascript,而我本人学习javascript已有一年多了,虽然我的主打语言是PHP,不过工作中也一直在使用js,所以对js也是有些理解的。因此这个问题就摆在了我的面前)


我试着对这个问题进行了如下解答:
 

首先 我们知道 && 是与运算即逻辑与 && 两边同时为真的时候才为真(true),其它情况为假(false)。在一些语言中0即为假 1即为真(其实非0即为真),例如我们看C语言中的这段代码
 


这段代码运行的结果 i 的值为 1
 

&&两边都为真 所以返回的结果为真,又C语言中1即为真 所以i的值为1,这点毋庸置疑。
好接下来我们慢慢的向开头的问题靠近。虽然说‘非0’即为真,那么说 1、10、20或者是其它‘非0’的数都可以认为是‘真’,这些数如果作为if或者循环语句的判断条件也都成立,即 If(20){} 条件为真  if(10){} 条件为真 等等。但是反过来说 ‘真’即为10、20或者30就不是那么贴切了。看C代码中的表达式 &&左边 13<20为真,20 为真,真&&真 当然为真,将‘真’赋值给整型的变量 i时 i的值也就成了1,不是20也不是30。原生的C语言中并没有 布尔 这种数据类型,但是在有布尔类型的语言中 ‘真’并不完全等价于 1。看下面这段PHP代码以及运行结果


从上面不难看出 true 在 值上面等于1 但是并不等价于1。当然在php中输出的时候true也会被输出为1,并不会输出true, 只有字符串“true” 才会被打印出true,这点不再赘述(在这里借此机会说明一下,在php中 === 符号很常用,经常用来判断 false 和 值为0 的情况)。


好我们接着看下面一段PHP代码及运行结果
 


没错啊 类似于(12<20&&20)的这种表达式返回的是布尔值啊,输出为1。说了这么多了竟然还没有回答出女友问的那个问题,她可能会着急了。噢 No,已经着急了。慢慢来,上面长篇的铺垫肯定是有用的。

现在我们接着说,在js中返回的不是true 或者1 而直接是具体的数值。为什么会是这样?
Js文档中给出的答案和我们理解的相同,两边同为true时才是true,就是简单的逻辑与,并没有给我们明确的答案。但是在js中 &&左边的表达式为真时会去检测其右边表达式的真假,如果两边都为真,那么&&运算会返回右边表达式的值,而不是布尔值。我们看12<20 表达式为true,20 也可以看做是一个表达式,非0即为真,所以右边也是true,没错啊,文档中已经说了,两边同时为true时返回true,那就奇怪了。但是注意了,文档中说的两边同时为true时返回true。12<20表达式返回true没问题,但是20是一个整数,非0即为真,只是说条件成立,但是20并不等价于true,而js中&&运算的机制是 该运算在哪边停止就返回那一边的值,也就是说 当程序检测12<20成立时会继续检测右边的值,当发现也为真时就把20这个值返回,注意是值,20不等价于true 那更不会是1了。

假如左边条件不成立,比如是 12>20 的话,该表达式返回false,左边为假了,运算也就不再向右进行了,直接返回false,如果左边是0 那表达式返回的就是0。说到这应该知道为啥返回20 而不是true或者1了。


举几个例子,我们可以试着推理一下结果,然后再去运行,就能发现其中的奥妙了
 

         1、var i = (12>20&&10); alert(i);
         2、var i =(12<20&&true); alert(i);
         3、var i =(false&&10); alert(i);
         4、var i = (0&&true); alert(i);
         5、var i =(true&&0); alert(i);
         6、var i =(true&&false); alert(i);


到了这里,费了这么大的篇幅总算说清这个问题了。还希望广大博友不会嫌我啰嗦,如有问题欢迎在下面留言,大家共同探讨,共同进步。

上一篇:没有了

下一篇:基于dede系统制作sitemap的xml文件

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

使用 PHP MySQLi 函数获取最后插入的 ID

发布时间:2023/05/09 浏览次数:85 分类:MySQL

本篇文章简要介绍了 PHP mysqli() 函数并演示了如何使用它从 MySQL 数据库中获取最后插入的 ID。它是一个名为 mysqli 的 MySQL 驱动程序扩展版本,

在 PHP 中使用 MongoDB 作为文件存储

发布时间:2023/04/20 浏览次数:133 分类:MongoDB

在为大文件创建可扩展存储方面,MongoDB 及其 GridFS(使用 MongoDB 查询语言 - MQL 编写)是市场上最好的文件存储解决方案之一。 在本教程中,您将学习如何在 PHP 中使用 MongoDB 作为文件存储。

如何在 PHP 中获取时间差的分钟数

发布时间:2023/03/29 浏览次数:183 分类:PHP

本文介绍了如何在 PHP 中获取时间差的分钟数,包括 date_diff()函数和数学公式。它包括 date_diff()函数和数学公式。

PHP 中的重定向

发布时间:2023/03/29 浏览次数:136 分类:PHP

本教程演示了如何将用户从页面重定向到 PHP 中的其他页面

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便