在各种各样的数据类型中,我们都会为其定义一个"空值"或"假值",比如对象类型的空值null,.NET Framework中数据库字段的空值DBNull,boolean类型的假值false等等。在JavaScript中也有很多种的"空值"和"假值",那么它们都有什么共同点和不同点呢?

其实标题里面我已经列出了JavaScript中所有的"空值"和"假值",除了boolean值本身就是truefalse这两种情况外,其它数据类型的"空值"主要是undefined和defined这两大类。这些空值的类型分别是:

   typeof(undefined) == 'undefined'
   typeof(null) == 'object'
   typeof("") == 'string'
   typeof(0) == 'number'
   typeof(false) == 'boolean'

这五个值的共同点是,在if语句中做判断,都会执行false分支。当然从广义上来看,是说明这些数值都是其对应数据类型上的无效值或空值。还有这五个值作!运算,结果全为:true。

这几个值中也有不同,其中undefined和null比较特殊,虽然null的类型是object,但是null不具有任何对象的特性,就是说我们并不能执行null.toString()等对象实例的默认调用。所以从这个意义上来说,null和undefined有最大的相似性。看看null == undefined的结果(true)也就更加能说明这点。不过相似归相似,还是有区别的,就是和数字运算时,10 + null结果为:10;10 + undefined结果为:NaN。

另外""、0和false虽然在if语句表现为"假值",可它们都是有意义数据,只是被作为了"空值"或"假值",因为:"".toString(),(0).toString()和false.toString()都是合法的可执行表达式。

其实这5个值在上面所说的这些差异里,并不太会给流程控制带来太大的问题,那么要区分它们什么呢?需要注意区分的是这些值在转换为String时的差异是比较大的,它们到String的转换关系是:

   String(undefined) -> "undefined"
   String(null) -> "null"
   String("") -> ""
   String(0) -> "0"
   String(false) -> "false"

这个转换关系在做字符串累加时需要特别的注意,否则会出些意想不到的问题。

转载于:https://www.cnblogs.com/wanliyuan/p/3975405.html

javascript中的undefined,null,,0和false的云集相关推荐

  1. 区分JavaScript中的undefined,null和NaN

    区分underfined,null和NaN 先看看下面语句的运行结果: 1: var a; 2: alert(a); //显示"undefined" 3: alert(typeof ...

  2. 2022-JavaScript-过滤数组中的undefined,null,空串,NaN

    2022-JavaScript-过滤数组中的undefined,null,空串,NaN let arr = [1,'',2,null,3,NaN,4,unfined,5,'',6] let arr1 ...

  3. Javascript中NaN、null和undefinded的区别

    var a1; var a2 = true; var a3 = 1; var a4 = "Hello"; var a5 = new Object(); var a6 = null; ...

  4. JavaScript 中的return true 和return false

    2019独角兽企业重金招聘Python工程师标准>>> 1.对于return true 和 return false: return false表示返回一个false值,也就是说提交 ...

  5. javascript中的undefined 和 not defined

    经研究发现,两者之间有很大的区别,不知从英语讲,这两者都有啥区别,研究结果如下 测试os:ubuntu 测试浏览器:chrome 测试案例1 console.log(a) 报错 ReferenceEr ...

  6. javaScript中的undefined

    Undefined类型 Undefine类型只有一个值,就是undefined,通过let或者var声明的变量但没有初始化时,就相当于给变量赋予了undefined,对于const和不加修饰符的变量必 ...

  7. [转]JavaScript中的几个tip

    1.JavaScript中的继承 在 JavaScript中实现继承的方法是:将子类的 prototype 属性设置为父类的对象. 例如,我有一个 Basket 类,继承 Hashtable 类: j ...

  8. JavaScript中的true和false

    JavaScript中的"", null, unbdefined,NaN,false 为false,其它为true 1 if ("" || null || un ...

  9. java Null==undefined_javascript中的undefined和null有什么区别

    原标题:javascript中的undefined和null有什么区别 java中的undefined和null的区别有:类型不同前者返回的是未定义值后者是对象:转换原始类型方式不同前者是不支持转换后 ...

最新文章

  1. Kubernetes权威指南精彩语录
  2. 如何在JAVA程序中使用Struct一次传入多条数据给Oracle的存储过程
  3. C# 窗体间传值(使用委托与自定义事件)
  4. “指定的文件名无效或太长” 无法拷贝,咋办
  5. nginx和apache限制IP地址访问的设置方法
  6. java怎么截取后8位数字_java如何更快生成00000000~99999999的8位数字保存到文件中?...
  7. JS核心基础数组的操作概述
  8. 基于云的平台利用新技术来改变商店式购物营销
  9. SQL Server 2008 附加数据库之后显示为 只读 的解决方法
  10. linux安装tailf 命令
  11. 自定义配置ros arduino bridge功能包集
  12. 细致琐碎的事才是工作的主旋律
  13. 一款可以帮助你处理文字、编写内容等办公软件-Word 2013 提供下载
  14. 手把手教你自制555芯片
  15. python爬取微博非好友圈_python爬取微博好友圈信息
  16. 数值分析中对有效数字的定义
  17. CSDN-MarkDown编辑器的姿势大全
  18. 什么是WRAP认证?WRAP认证详解
  19. 学习游戏建模的方式有哪些?次世代游戏建模学习路线以及要掌握的3D软件分别是?
  20. Excel如何建立个人月考勤表

热门文章

  1. 【three.js详解之一】入门篇
  2. 一起谈.NET技术,使用WCF实现SOA面向服务编程—— 架构设计
  3. python3多进程 queue 取值_python3.4.3 多进程之间结果变量的传递问题,程序无任何结果输出...
  4. python float 精度_谈谈关于Python里面小数点精度控制的问题
  5. java ant 详解
  6. ViewPager VS ViewFilpper
  7. EventBus 使用介绍
  8. ucenter词语过滤原理
  9. 远程连接windows系统提示:其他用户要远程登录,需要通过远程桌面服务进行登录的权限......
  10. Linux磁盘分区之fdisk命令