javascript进阶学习:null和undefined的区别、布尔类型转换

蛰伏已久 2019-01-08

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)