复制代码代码示例:
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.constructor等对象实例的默认调用。
可以这样理解,null和undefined有最大的相似性。看看null == undefined的结果(true)也就更加能说明这点。不过相似归相似,还是有区别的,就是和数字运算时,10 + null结果为:10;10 + undefined结果为:NaN。
另外""、0和false虽然在if语句表现为"假值",可它们都是有意义数据,只是被作为了"空值"或"假值",因为:"".toString(),(0).toString()和false.toString()都是合法的可执行表达式。
注意:区分这些值,主要在于转换为String时的差异是比较大的,它们到String的转换关系是:
复制代码代码示例:
String(undefined) ->"undefined"
String(null) ->"null"
String("") ->""
String(0) ->"0"
String(false) ->"false"
这个转换关系在做字符串累加时,需要特别的注意。
否这会出些意想不到的问题,比如可能会遇到null被默认转为"null"的情况,搞的你相当的迷糊。
假:var a=0
var c=''
var d=null
var e=undefined
真:var f=[]
var g={}
var h=function(){}
var b='0'
一、js中的数字0就是false,非0为true,!表示取反。所以:!0--false取反--true;!!0--false双重取反--false;!1--true取反--false;!!1--双重取反--true;!-1--true取反--false!!-1--true双重取反--true。二、==和===:==:先检查两个操作数数据类型,如果相同,则进行===比较,如果不同,则愿意为你进行一次类型转换,转换成相同类型后再进行比较;===:如果类型不同,直接就是false。具体比较过程:1、双等号==: (1)如果两个值类型相同,再进行三个等号(===)的比较。(2)如果两个值类型不同,也有可能相等,需根据以下规则进行类型转换在比较:如果一个是null,一个是undefined,那么相等。如果一个是字符串,一个是数值,把字符串转换成数值之后再进行比较。2、 三等号===:(1)如果类型不同,就一定不相等。(2)如果两个都是数值,并且是同一个值,那么相等;如果其中至少一个是NaN,那么不相等。(判断一个值是否是NaN,只能使用isNaN()来判断)。(3)如果两个都是字符串,每个位置的字符都一样,那么相等,否则不相等。如果两个值都是true,或是false,那么相等。如果两个值都引用同一个对象或是函数,那么相等,否则不相等。如果两个值都是null,或是undefined,那么相等。扩展资料:在js做比较的时候,有这样的三条规则:1、如果比较的两者中有bool,会把bool先转换为对应的number,即0和1。2、如果比较的双方中有一方为number一方为string,会把string转换为数字。3、把string直接转换为bool的时候,空字符串‘'转换为false,除此外的一字符串转换为true。参考资料:百度百科--比较运算符