js中null和undefined的区别

2023-08-13  本文已影响0人  饱饱想要灵感

概述

在JavaScript中,null和undefined是两个特殊的值,表示缺少值或未定义的值。

原型链的尽头是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
上一篇下一篇

猜你喜欢

热点阅读