学过Java和C的人,都知道逻辑与(&&)和逻辑或(||),他们都是短路运算符,也就是说,对于&&来说,只要左边的操作数是false,它就不会再去判断右边的操作数是true还是false了,因为这个时候已经知道整个表达式的值就是false了;同理对于||来说,只要左边的操作数是true,它也不会再去计算右边的操作数了。

对于Java和C而言,&&和||的返回值不是true就是false,但是Javascript却不是这样的,如果你认为Javascript也是返回true或者false的话,请看下面的小例子:

1. 先来看看逻辑与&&

var a = false;

var b = a && true; // b=false

----------------------------------

var a = 0;

var b = a && true; //b=0

----------------------------------

var a = null;

var b = a && true; //b=null

2. 再来看逻辑或||

var a = false;

var b = a || true; // b=true

----------------------------------

var a = 0;

var b = a || 500; //b=500

----------------------------------

var a = null;

var b = a || "xyz"; //b="xyz"

现在我们来解释一下为什么会是怎样的:

1.  Javascript本身是弱类型的语言,也就是说一个变量的类型是不固定的,是在运行时,根据具体的变量值来决定的。

2. Javascript中的Boolean值,有这样的类型转化规律:

2.1 对于数字而言,除0和NaN可以被转成false,其他的数字可以被转成true;

2.2 对于字符串而言,空字符串("")可以被转成false,非空的字符串都可以被转成true;

2.3 对于对象而言,null的对象可以被转成false,非null的对象可以被转成true;

2.4 对于null和undefined,都会被转成false。

3. 在if等需要Boolean值的上下文时,Javascript会自动执行上一点中所提到的类型转化。

现在大家明白了吗?

最新文章

  1. 【python】tarfile的路径问题
  2. Android BLE 蓝牙编程(四)
  3. 学习 ---- JavaScript 高级设计程序 第三章(数据类型)
  4. MQTT开发小记(一)
  5. listview 遇到问题java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
  6. Spark里边:到底是什么RDD
  7. Ubuntu 14.04 登陆界面循环问题解决
  8. 实际开发中,实用的辅助iOS开发的工具
  9. ubuntu的/etc/modules内核模块文件
  10. HashSet和CopyOnWriteArraySet
  11. qcharts编译
  12. js知识点总结
  13. css3动画transition animation
  14. Elasticsearch 5.4.3实战--Java API调用:搜索建议
  15. babelrc
  16. mysql报错1105 -without an explicit primary key with pxc_strict_mode = ENFORCING or MASTER
  17. pycharm 调试 scrapy
  18. 推荐几个不错的h5游戏引擎
  19. java基础24 线程、多线程及线程的生命周期(Thread)
  20. ASP.ENT前台更改绑定数据的日期格式

热门文章

  1. [转] Linux 句柄是什么 ?
  2. JAVA面试常见问题之锁机制篇
  3. linux apache vhost
  4. HDU3486 RMQ
  5. 计算机组成原理(电脑硬件&语言分类)
  6. Linux学习(一):软链接和硬链接
  7. springmvc 使用poi解析excel并通过hibernate连续插入多条数据 实际数据库只能保存最后一条
  8. 关于python的元组操作
  9. random模块&hashlib模块
  10. hbase phoenix char may not be null