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');