【前端js】一分钟掌握undefined,not defined,null和NaN的区别


一、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
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值