null 和undefined NAN 在js中 区别

416 阅读2分钟

undefined

表示一个变量自然的、最原始的状态值,

记住几个例子就行: undefined: 未定义,一个变量最原始的状态, 刚声明出来的

1,声明一个变量,但是没有赋值

var foo;
console.log(foo); // undefined

2,访问对象上不存在的属性或者未定义的变量

console.log(Object.sex); // undefined 
console.log(typeof aaa); // undefined

3,调用函数时,应该提供的参数没有提供,该参数等于undefined

//函数定义了形参 a
function fn(a) {
    console.log(a); // undefined
}
fn(); //未传递实参

4,函数没有返回值时,默认返回undefined

var x = f();
x // undefined

5,使用void对表达式求值 用法较少

void 0 ; // undefined 
void false; // undefined 
void []; // undefined 
void null; // undefined 
void function test(){} ; // undefined

null

人为置空,而非一个变量最原始的状态,在内存中表示是,栈中的变量没有指向堆中的内存对象。

  • 如果定义的变量在将来用于保存对象,最好将该变量初始化为null;
  • 当一个数据不再需要使用时,我们最好通过将其值设置为null来释放其引用,这个做法叫做解除引用。不过解除一个值的引用并不意味着自动回收改值所占用的内存。解除引用的真正作用是让值脱离执行环境,以便垃圾收集器在下次运行时将其回收。解除引用还有助于消除有可能出现的循环引用的情况。这一做法适用于大多数全局变量和全局对象的属性,局部变量会在它们离开执行环境时(函数执行完时)自动被解除引用。
var data = null;
console.log(typeof data); // "object"

NaN not a number 

是一种特殊的 Number 类型值。

typeof NaN   // "number"

非数字类型转换为数字类型 是 或者数字运算失败时,会返回NaN
会返回NaN的情况:

Infinity / Infinity;   // 无穷大除以无穷大
Math.sqrt(-1);         // 给任意负数做开方运算
'a' - 1;               // 算数运算符与不是数字或无法转换为数字的操作数一起使用
'a' * 1;
'a' / 1;
parseInt('a');         // 字符串解析成数字
parseFloat('a');