javascript进阶学习:null和undefined的区别、布尔类型转换
变量通过var声明,但是没有给初始值,则为undefined;如果连声明都没有,则属于语法错误了,会报错
var a; console.log(a) //undefined console.log(c) //Uncaught ReferenceError: c is not defined
null用来描述空值,表示变量我已经初始化了,只是初始化没有值
var b=null console.log(b) //null
可以看出,undefined是出乎意料的或者类似错误的值的空缺,而null是表示正常的或在意料之中的值的空缺,可能是我们有意给赋为空值的。
通过typeof可以看出他们的不同,undefined通过typeof得到的是“undefined”,而null通过typeof得到的是“object”
var a; console.log(typeof a) //undefined var b=null console.log(typeof b) //object
尽管null和undefined不同,但是通过相等运算符“==”判断,则认为是相等的
通过严格相等运算符“===”判断,则认为是不相等的
var a; var b=null console.log(a==b) //true console.log(a===b) //false
有6种值会被转换为布尔值的false
包括:undefined、null、""(空字符串)、0、-0、NAN
其他情况会被转换为布尔值的true,当我们直接对值进行if判断的时候要注意,特别是空对象{}、空数组[],在进行判断的时候为true
var a var b=null if(!a){ console.log("undefined被认为是false") } if(!b){ console.log("null被认为是false") } if(!0){ console.log("0被认为是false") } if(!-0){ console.log("-0被认为是false") } if(!""){ console.log("空字符串被认为是false") } if(!(1*'a')){ console.log("NAN被认为是false") } if({}){ console.log("空对象被认为是true") } if([]){ console.log("空数组被认为是true") }
两个相同的对象或数组进行比较,则永远为false。对象的比较并非值的比较,而是引用的比较,当且仅当它们引用同一个基对象时,它们才相等
var a={x:1} var b={x:1} console.log(a==b) //false
var a={x:1} var b=a console.log(a==b) //true
-END-
点赞(0)