js中null和undefined的区别
2023-08-13 本文已影响0人
饱饱想要灵感
概述
在JavaScript中,null和undefined是两个特殊的值,表示缺少值或未定义的值。
- undefined是一个特殊的值,表示一个变量没有被赋值或者一个对象的属性不存在。当声明一个变量但未给它赋值时,它的默认值就是undefined。同样地,访问一个对象的未定义的属性时,返回的值也是undefined。
- null则表示一个空值或者一个“不存在的”对象。它是一个被人为赋予的值,表示变量的期望值是不存在的。null是一个原始值,表示一个空的、无效的或者未知的对象。当我们需要明确地表示一个变量为空时,可以将其赋值为null。
原型链的尽头是null。null没有任何属性和方法,也没有自己的原型
Object.getPrototypeOf(Object.prototype) // null
Object.getPrototypeOf(null) // Uncaught TypeError: Cannot convert undefined or null to object
at Function.getPrototypeOf (<anonymous>)
at <anonymous>:1:8
一、相同点
1、都是js的基本数据类型,一般将它们看成两个特殊值
2、将一个变量赋值为undefined或null,语法效果几乎没区别
3、在if
语句中,都会被自动转为false
,另外,数字0在if
中也表示否
4、严格相等运算符(===):undefined和null 只与自身严格相等, undefined === null
返回false
相等运算符(==):undefined和null 与自身比较,或者互相比较时,会返回true;
与其他类型的值比较时,结果都为false
// 严格相等运算符 ===
null === null // true
undefined === undefined // true
null === undefined // false
// 相等运算符 ==
null == null // true
undefined == undefined // true
null == undefined // true
false == null // false
false == undefined // false
0 == null // false
0 == undefined // false
5、 null和undefined都无法转成对象
// 如果参数为空(或者为undefined和null),Object()返回一个空对象。
var obj = Object();
// 等同于
var obj = Object(undefined);
var obj = Object(null);
obj instanceof Object // true
二、不同点
1、定义
null是js的关键字,表示空值;
undefined不是js的关键字,它是一个全局变量
2、转化为数字时
null是一个表示“空”的对象,转为数值时为0
undefined是一个表示"此处无定义"的原始值,转为数值时为NaN
Number(null) // 0
5 + null // 5
Number(undefined) // NaN
5 + undefined // NaN
3、转化为字符串时
undefined:转为字符串'undefined'
null:转为字符串'null'
String(null) // 'null'
'5' + null // '5null'
String(undefined) // 'undefined'
'5' + undefined // '5undefined'
4、typeof
typeof null // 'object'
typeof undefined // 'undefined'
5、Object.prototype.toString.call()
Object.prototype.toString.call(null) // '[object Null]'
Object.prototype.toString.call(undefined) // '[object Undefined]'
6、JSON转化时
JSON 对象的值可以是null,不能使用undefined
JSON.parse('{"a":null}') // {a: null}
// 报错
JSON.parse('{"a":undefined}') // Uncaught SyntaxError: Unexpected token 'u', "{"a":undefined}" is not valid JSON
at JSON.parse (<anonymous>)
at <anonymous>:1:6
如果对象的属性是undefined,该属性会被JSON.stringify()
跳过
JSON.stringify({a: null}) // '{"a":null}'
JSON.stringify({a: undefined}) // '{}'
如果数组的成员是undefined,该成员会被JSON.stringify()
跳过
JSON.stringify([null, undefined]) // '[null]'
三、返回undefined的典型场景
// 变量声明了,但没有赋值
var i;
i // undefined
// 调用函数时,应该提供的参数没有提供,该参数等于 undefined
function f(x) {
return x;
}
f() // undefined
// 对象没有赋值的属性
var o = new Object();
o.p // undefined
// 函数没有返回值时,默认返回 undefined
function f() {}
f() // undefined
// void运算符不返回任何值,或者说返回undefined
void 0 // undefined
// 严格模式的函数体内部this是undefined,而不是window
function f() {
'use strict';
console.log(this === undefined);
}
f() // true