javascript中的undefined,null,"",0和false的云集

  在各种各样的数据类型中,我们都会为其定义一个"空值"或"假值",比如对象类型的空值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"

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

时间: 2024-10-12 15:45:18

javascript中的undefined,null,"",0和false的云集的相关文章

区分JS中的undefined,null,"",0和false

在程序语言中定义的各种各样的数据类型中,我们都会为其定义一个"空值"或"假值",比如对象类型的空值null,.NET Framework中数据库 字段的空值DBNull,boolean类型的假值false等等.在JavaScript中也有很多种的"空值"和"假值",那么它们都有什么共同点和 不同点呢? 其实标题里面我已经列出了JavaScript中所有的"空值"和"假值",除了boole

JavaScript中的Undefined / Null 类型相关说明

1,综述: ※Undefined 和 Null是JavaScript中的两种数据类型(其他的类型还有:Boolean, String, Number, Object). ※Undefined类型只有一个值:undefined:Null类型也只有一个值:null. 2,Undefined类型相关说明: ※在使用了var声明了相关变量但未对其初始化时,这个变量的值就是undefined. ※这和未经声明(即未经定义)的变量不一样,如果使用未经声明的变量,会报错ReferenceError: s is

区分JavaScript中的undefined,null和NaN

区分underfined,null和NaN 先看看下面语句的运行结果: 1: var a; 2: alert(a); //显示"undefined" 3: alert(typeof a); //显示"undefined" 4: alert(b); //显示"undefined" 以上说明a的值和类型都是'underfined' 1: var a = null; 2: alert(a); //显示"null" 3: alert(

JavaScript中的两个“0”(翻译)

本文翻译自JavaScript’s two zeros JavaScript has two zeros: −0 and +0. This post explains why that is and where it matters in practice. JavaScript 中有两个“0”: -0 和 +0 .这篇文章解释了为什么,并且指出实际生产中会造成什么影响 1.The signed zero 1.“-0” Numbers always need to be encoded to b

JavaScript中的两个“0” -0和+0

JavaScript中的两个"0"(翻译) 本文翻译自JavaScript's two zeros JavaScript has two zeros: ?0 and +0. This post explains why that is and where it matters in practice. JavaScript 中有两个"0": -0 和 +0 .这篇文章解释了为什么,并且指出实际生产中会造成什么影响 1.The signed zero 1."

javascript中"return obj === void 0"这种写法的原因和好处

学习underscore.js的时候,发现源码中经常出现类似下面的代码: if (context === void 0) return func; if (array == null) return void 0; 以前没有见过这种写法,到网上搜了一些资料,刚好发现stackoverflow上也有人提出类似的疑问.这里总结归纳下,做个笔记.void其实是javascript中的一个函数,接受一个参数,返回值永远是undefined.可以说,使用void目的就是为了得到javascript中的un

javascript中常见undefined与defined的区别

在JavaScript中相信"undefined"与"defined"对大家来说都肯定不陌生,但是又不是很清楚它们的区别,先看两个demo我们再说, 例1. console.log(parms); //在控制台出现 Uncaught ReferenceError: parms is not defined 例2. var flag; console.log(flag); //在控制台出现 undefined 通过上面两个例子就能很清楚的看出它两的区别了,not de

Javascript中的undefined、null、""、0值和false的区别总结

在程序语言中定义的各种各样的数据类型中,我们都会为其定义一个"空值"或"假值",比如对象类型的空值null,.NET Framework中数据库字段的空值DBNull,boolean类型的假值false等等.在JavaScript中也有很多种的"空值"和"假值",那么它们都有什么共同点和不同点呢? 其实标题里面我已经列出了JavaScript中所有的"空值"和"假值",除了boolean

Javascript中判断 Undefined 还是 Null 的方法

在 JavaScript 中, null 用于对象, undefined 用于变量,属性和方法. 对象只有被定义才有可能为 null,否则为 undefined. 如果我们想测试对象是否存在,在对象还没定义时将会抛出一个错误. 错误的使用方式: if (myObj !== null && typeof myObj !== "undefined") 正确的方式是我们需要先使用 typeof 来检测对象是否已定义: if (typeof myObj !== "un