与其他原始数据类型相比,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('无数据') } // "无数据"
这样就可以判断是否有数据,根据判断结果划分处理。
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"