文章目录
一、undefined,not defined,和null的不同点:
1.含义不同:
1.1 not defined
是一个报错,表示一个变量没有声明也没有定义
(not declared at a given point of time
)
console.log(b)//Uncaught ReferenceError: b is not defined
window.b = 5;
1.2 undefined
不是一个报错,undefined
是一种基础数据类型,也是挂载在window
对象的一个属性,不是关键字。从js解析器的层面上解释,实际上是js解析到这个变量时,发现作用域里面没有这个变量.
window.undefined//undefinde
情形一:当你引用了一个变量,变量被声明了,但没有初始化时
,(we declare a variable without assigning any value to it
),这个变量的值就是 undefined
let name;
console.log(name); //undefined
情形二: 引用了对象/数组
中未声明的属性/方法,
//Object
let obj = {a:3};
console.log(obj.b);//undefined
//Array
let arr = [1];
console.log(arr[1]);//undefined
举个?——常见的一种undeifined报错,使用一个数组的的方法时报错method is undefined
,其实是说明这个变量指向的不是一个数组(比如null/undefined),这些类型自然没有数组的原型方法,
正确姿势:因此要使用一个数组的方法时,需要先判断这个数组不为null,避免报错
let arr2;
console.log(arr2.length)// Uncaught TypeError: Cannot read property 'length' of undefined
//正确姿势
arr2 && console.log(arr2.length)
1.3 null
null
表示一个变量已声明定义了一个空值
,表示一个空对象,是一个关键字:
Object(null)//{}
1.4 NaN
NaN
是一种数字类型,常用作数字运算返回的结果中,表示结果无法转化成数字的数字类型
,它不等于自身
console.log(s="a"*1)//NaN
2.typeof
运算符区别他们
undefined返回undefined;null返回object对象,NaN返回number。
typeof undefined//"undefined"
typeof null//"object"
typeof NaN//"number"
3.转化成数字不同:
undefined和NaN返回NaN;null返回0。
Number(undefined)//NaN
Number(NaN)//NaN
Number(null)//0
4.是否有方法和属性
undefined和null都没有方法,但是NaN有方法,比如下面的原始值方法
undefined.valueOf()
//Uncaught TypeError: Cannot read property 'valueOf' of undefined
null.valueOf()
// //Uncaught TypeError: Cannot read property 'valueOf' of null
NaN.valueOf()//NaN
5.相等判断
//全等判断===
console.log(NaN===NaN)//false
console.log(undefined===undefined)//true
console.log(null===null)//true
//相等判断==,操作符会先转换操作数(通常称为强制转型),然后再比较它们的相等性。
console.log(NaN==NaN)//false
console.log(undefined==null)//true
console.log(NaN==null)//true
console.log(NaN==undefined)//false
二、相同点:
1.都是“假值”,
布尔值会转成false
;
Boolean(undefined)//false
Boolean(null)//false
Boolean(NaN)//false
三、开发中的使用:
1.创建一个对象/变量时候,可以先赋值为null
var a =null
2.函数需要传多个参数时候,判断函数的某个参数是否传了
if(x===undefined)
3.判断某个值是否为空,两个等号是因为会直接对值隐式转化。
x==null