解码 JavaScript:掌握 Null、未定义和空值
文章标签
未定义
众所周知,javascript 是一种动态类型语言,在处理空值或不存在的值时有时会让我们感到困惑。在这篇博文中,我们将探讨 javascript 中 null、未定义、空字符串和空数组之间的区别,并通过代码示例来说明每个概念。
1. 空
null 是故意的非值。它表示一个已被显式定义为没有值的变量。
let myvariable = null;console.log(myvariable); // output: nullconsole.log(typeof myvariable); // output: "object"
注意: typeof null 返回对象,由于遗留原因,这是 javascript 中已知的怪癖.
2. 未定义undefined 代表已声明但尚未赋值的变量。let myundefinedvariable;console.log(myundefinedvariable); // output: undefinedconsole.log(typeof myundefinedvariable); // output: "undefined"function myfunction(param) { console.log(param);}myfunction(); // output: undefined
let emptystring = '';console.log(emptystring); // output: ""console.log(typeof emptystring); // output: "string"console.log(emptystring.length); // output: 0
let emptyarray = [];console.log(emptyarray); // output: []console.log(typeof emptyarray); // output: "object"console.log(array.isarray(emptyarray)); // output: trueconsole.log(emptyarray.length); // output: 0
console.log(null == undefined); // output: trueconsole.log(null === undefined); // output: falseconsole.log('' == null); // output: falseconsole.log('' == undefined); // output: falseconsole.log([] == null); // output: falseconsole.log([] == undefined); // output: falseconsole.log(boolean(null)); // output: falseconsole.log(boolean(undefined)); // output: falseconsole.log(boolean('')); // output: falseconsole.log(boolean([])); // output: true
function isnullorundefined(value) { return value == null;}console.log(isnullorundefined(null)); // output: trueconsole.log(isnullorundefined(undefined)); // output: trueconsole.log(isnullorundefined('')); // output: falseconsole.log(isnullorundefined([])); // output: false
处理空字符串和数组function isnullorundefined(value) { return value == null;}console.log(isnullorundefined(null)); // output: trueconsole.log(isnullorundefined(undefined)); // output: trueconsole.log(isnullorundefined('')); // output: falseconsole.log(isnullorundefined([])); // output: false
function isEmpty(value) { if (typeof value === 'string') { return value.length === 0; } if (Array.isArray(value)) { return value.length === 0; } return false;}console.log(isEmpty('')); // Output: trueconsole.log(isEmpty([])); // Output: trueconsole.log(isEmpty('hello')); // Output: falseconsole.log(isEmpty([1, 2, 3])); // Output: false
6. 最佳实践function isEmpty(value) { if (typeof value === 'string') { return value.length === 0; } if (Array.isArray(value)) { return value.length === 0; } return false;}console.log(isEmpty('')); // Output: trueconsole.log(isEmpty([])); // Output: trueconsole.log(isEmpty('hello')); // Output: falseconsole.log(isEmpty([1, 2, 3])); // Output: false
- 当你想显式指示变量没有值时,请使用 null。
- 当变量没有被赋值时,让变量处于未定义状态。
- 当您需要不带字符的字符串时,请使用空字符串('')。
- 当您需要没有元素的列表时,请使用空数组([])。
- 始终使用严格相等(===),除非您有特定原因不这样做。 检查 null 或 undefined 时,可以使用 value == null 。