在js中的not defined,undefined,null,nan区别在哪里

发表于:
来源:阿酷技术学习
作者:simplefastbest

我经常遇到not defined,undefined,null,nan提示,由于我是一个菜鸟,今天我要来做一个复习巩固,我就在网上找了一篇文章谈他们的区别,特记录如下。

这个问题经常被问,被讨论,经常被遇到。一般来说,javascript有三种方法来描述不存在或不应该存在的值。

undefined

1,定义一个变量,但是没有指定一个值给它,则javascript解释器隐式的赋值给它undefined

let name;
console.log(name); //undefined

2,当在对象或数组中某个变量没有被赋值时:

let numArray = [1,2,,4];
console.log(numArray);  
//[1, 2, empty, 4]
typeof(numArray[2])
//"undefined"

3,当一个函数没有返回状态,但是被调用作为一变量的值时。

let add = (a,b) => {
  let c = a+b;
  //return c;
}
let sum = add(2,3);
console.log(sum); 
//Output: undefined

NULL

在javascript中null是一个保留关键字,我们可以显式的赋值一个变量为null。本质上Null表示一个不在的值或一个空的值。我们可以直接告诉javascript解释器这个变量的值不存在,就是没有值。

let life = null;
console.log(life); //null

Not Defined

一个变量没有被定义,是指在某时执行没有使用声明关键字(如var、let或const)声明的变量。

看下面两个例子,对比一下区别

console.log(a);
var a = 5;
//Output:- undefined

去掉关键字var以后:

console.log(b);
b = 5;
//Output:- "ReferenceError: b is not defined

那么为什么a被打印undefined,而b是is not defined呢?因为javascript的工作机制,在逻辑处理之前,以var,let,const声明的变量被提升的机制(variable hoisting works in javascript),在解释之前先进行变量声明提升。所以

上述的a工作方式如下

var a;
console.log(a); //undefined
a = 5;

b的工作方式如下:

console.log(b); // b is not defined
window.b = 5;

不同,区别

可以看下列null和undefined的区别

console.log(typeof(undefined));  //"undefined"
console.log(typeof(null));       //"object"

null是一个对象,表示它根本不存在的。而undefined是一个undefined值,就是它自已。

还有好多算术操作用null,表示不存在,而undefined结果nan,(not a number).

let a = 7 + null;
console.log(a); // 7
let b = 7 * null;
console.log(b); // 0
let c = 8 + undefined;
console.log(c); //NaN
let d = 8 * undefined;
console.log(d); //NaN

先到此为止.

参考资料:

https://medium.com/technoetics/difference-between-null-undefined-and-not-defined-in-javascript-3a52a62894b