详解JavaScript特殊数据类型,null和undefined的区别是什么

与其他原始数据类型相比,null和undefined是特殊的数据类型。

在这篇文章中,我们将解释什么是null和undefined,以及它们之间的区别。

null类型

null类型是一种比较特殊的数据类型,只有自身的“null”值。

null值有“空值”“无值”“未知值”的意思。

如果使用typeof运算符检查类型,则返回“object”

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

这就提出了一个问题,“为什么是一个对象?”

将 null 视为对象是官方认可的兼容性语言错误。

换句话说,null不是对象,只是因为语言的错误而被判定为对象。

null 类型有意表示没有值。

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

关键是它是故意的,用于指示变量不引用特定对象或值,或检查数据是否存在。

例如,下面的情况。

将名为user对象的name属性设置为null作为初始值。

此外,如果数据为空,则使用if语句处理“无数据”。

let user = {
  name: null // 明示值为空
}

if (user.name === null) {
  console.log('无数据')
}

// "无数据"

这样就可以判断是否有数据,根据判断结果划分处理。

详解JavaScript特殊数据类型,null和undefined的区别是什么

undefined类型

undefined类型与null类型一样,是一种特殊的数据类型,只有它自己的“undefined”值。

undefined的值具有“未定义值”或“未分配值”的含义。

如果使用typeof运算符检查类型,则返回“undefined”。

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

如果一个变量被声明但没有赋值,则其值为undefined。

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

从技术上讲,undefined类型与null类型一样,可以将undefined值赋给变量。

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

但这种方法不太推荐。

因为undefined类型用于确定是否分配了变量。

通常使用null类型来明确表示值为空。

null和undefined之间的区别

null和undefined的共同点是它们都表示“没有值”。

语义上的区别在于null表示“没有值,因为值本身不存在”,而undefined表示“没有值,因为没有赋值”。

自然发生/非自然发生

除非明确使用,否则null不会自然发生。

相反,undefined在没有赋值时自然发生,即使没有明确使用它。

let name1 = null; //明确表示为null
console.log(name1); // null

let name2; // 并没有明确表示为undefined
console.log(name2); // undefined

访问对象上不存在的属性时也返回undefined。

let user = {
  name: 'ciyawang'
}

console.log(user.name); // “ciyawang” → name属性存在
console.log(user.age); // undefined → age属性不存在

有时,当您访问一个认为已经赋值的值时,返回的是undefined,这才发现是拼写错误造成的。

let fruits = ['apple', 'banana', 'blueberry'];
console.log(fruit); // fruit is not defined" → 不是fruit而是fruits

像这样undefined是自然发生的,所以出现的频率也多。

结语

最后,让我们回顾一下数据类型的差异。

用typeof运算符检查类型,null返回“object”,而undefined返回“undefined”。

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