JavaScript中奇葩的假值

通常在以下语句结构中需要判断真假

  1. if分支语句
  2. while循环语句
  3. for里的第二个语句

1

2

3

4

5

6

7

if (boo) {

// do something

}

while (boo) {

// do something

}

JavaScript中有 6 个值为“假”,这六个值是

  1. false
  2. null
  3. undefined
  4. 0
  5. '' (空字符串)
  6. NaN

这里面 false 本身是布尔类型,其它 5 个则不是。

除了这 6 个外,其它均为“真” ,包括对象、数组、正则、函数等。注意 '0'、'null'、'false'、{}、[]也都是真值  。

虽然这六个值都为“假”,它们之间并非都相等

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

console.log( false == null )      // false

console.log( false == undefined ) // false

console.log( false == 0 )         // true

console.log( false == '' )        // true

console.log( false == NaN )       // false

console.log( null == undefined ) // true

console.log( null == 0 )         // false

console.log( null == '' )        // false

console.log( null == NaN )       // false

console.log( undefined == 0)   // false

console.log( undefined == ''// false

console.log( undefined == NaN) // false

console.log( 0 == '' // true

console.log( 0 == NaN ) // false

对于“==”,以上得出下列结论

  • false 除了和自身比较为 true 外,和 0,"" 比较也为 true
  • null 只和 undefined 比较时为 true, 反过来 undefined 也仅和 null 比较为 true,没有第二个
  • 0 除了和 false 比较为 true,还有空字符串 ''" 和空数组 []
  • 空字符串 '' 除了和 false 比较为 true,还有一个数字 0

当然,对于这一切,查看下规范是最踏实的,ES里的ToBoolean阐述了所有情形

相关:

JavaScript中的隐式类型转换

javascript 中的 true 或 false的更多相关文章

  1. javascript中的true和false

    今天遇到一个问题,执行下面的代码返回true还是false?请说明理由 console.log([] == ![]) 在浏览器中运行了一下,发现结果是true.为什么会这样呢?于是查找了相关的资料. ...

  2. 支付宝支付后回调通知中responseTxt=true isSign=False可能的问题

    在做支付宝的二维码扫码支付功能,生成二维码成功,扫描后也能付款,付款后也能回调通知到我的页面,但是验证签名的时候出错,找了好久终于找到是什么原因: 引用 1. 用的RSA签名验证,默认密钥纯字符,并不 ...

  3. Python3中真真假假True、False、None等含义详解

    概述 在Python中,不仅仅和类C一样的真假类似,比如1代表真,0代表假.Python中的真假有着更加广阔的含义范围,Python会把所有的空数据结构视为假,比如[](空列表).{}(空集合).'' ...

  4. python中的True和False

    返回真假时,需要为: return True return False

  5. JavaScript中 return; 、return false; 与return true的区别

    工作中有时候用到  return; ,有时候用到  return false;  还有时候会用到  return true; 这三个到底是什么区别?为什么一会这个一会又那个! 1.先看下return ...

  6. JavaScript中的 true

    经常看到有人写 如下代码,有时候也是凭经验猜想到底是什么意思,本着认真学习 JavaScript 的精神,专门写一篇去讨论这个问题. if(name){ //do something. }else{ ...

  7. javascript中几种为false的值

    如果JavaScript预期某个位置应该是布尔值,会将该位置上现有的值自动转为布尔值.转换规则是除了下面六个值被转为false,其他值都视为true. undefined null  false  0 ...

  8. jquery中 cache: true和false的区别

    true:会读缓存,可能真的到服务器上. 假如上次访问了a.html,第二次的时候得到的是上次访问的a.html的结果,而不是重新到服务器获取. false:会在url后面加一个时间缀,让它跑到服务器 ...

  9. if判断中的true和false

    真值指的是在 布尔值 上下文中转换后(使用强制类型转换)的值为真的值.所有值都是真值,除非它们被定义为 falsy (即除了 false,0,"",null,undefined 和 ...

随机推荐

  1. <!DOCTYPE> DTD基础

    1.什么是DTD? DTD(Document Type Definition)是文档类型定义. 2.DTD有什么用? 约定文档格式,规定元素,元素属性,元素关系,标签,实体等. 3.DTD分类 DTD ...

  2. html中button自动提交表单?

    在ie中,button默认的type是button,而其他浏览器和W3C标准中button默认的属性都是submit

  3. canvas滤镜之简单的取反

    自己学习了一下canvas滤镜 编写一个简单的小界面,嘿嘿! 注释都在里面啦啦啦,感兴趣的来瞅瞅哦

  4. 内嵌页js与ios和安卓的交互

    ios: 一个iframe,改变url会发送一个请求,把url设置成就是bridge://xxxxx客户端就可以拦截请求,并在全局变量xxxxx中取出一个字符串.例如{event:'click'},可 ...

  5. python无意中发现的

    http://www.zhihu.com/question/37904398?sort=created&page=2 >>> a = [[1,2],[3,4],[5,6,7] ...

  6. 在Linux中使用vi打开文件时如何显示行号,及跳转到指定行

    vi 文件名,打开文件后 如果要显示所有行号,使用 :set nu 如果要显示当前行号,使用 :nu 如果要跳转到指定行,使用 :行号 例如,跳转到第10行,使用 :10

  7. Rest接口测试,巧用firebug插件

    两年前开始做软件测试,刚接触的是关于rest接口的测试.作为一个刚进职场的测试小菜鸟,当时对接口的理解并不是很充分,具体是怎么实现的也不清楚.在进行接口测试时,只是设置接口入参,调用接口,查看接口是否 ...

  8. BestCoder Round #43

    T1:pog loves szh I(hdu 5264) 题目大意: 给出把AB两个字符串交叉拼起来的结果,求出原串. 题解: 不解释..直接每次+2输出. T2:pog loves szh II(h ...

  9. ubuntu install wine

    1 install sUdo add-apt-repository ppa:wine/wine-builds sudo apt-get update sudo apt-get install wine ...

  10. JavaScript基础--DOM对象(十三):(windows对象:history\location\navigator\screen\event)

    DOM编程1.为什么要学习DOM(1) 通过dom编程,我们可以写出各种网页游戏(2)dom编程也是ajax的重要基础2.DOM编程介绍DOM = Document Object Model(文档对象 ...