ES12 是 ECMAScript 的最新版本,它引入了一种新的运算符 ??
,以及对 typeof
运算符的扩展。这篇文章将介绍 typeof
运算符的新特性,以及如何结合 ??
运算符实现更加简洁和安全的代码。
typeof 运算符
在 JavaScript 中,typeof
运算符用于确定一个变量或表达式的数据类型。它返回一个字符串,表示操作数的数据类型。例如:
typeof 42 // "number" typeof "hello" // "string" typeof true // "boolean" typeof undefined // "undefined" typeof null // "object"
需要注意的是,typeof null
的结果是 "object"
,这是 JavaScript 语言的历史遗留问题。如果想判断一个变量是否为 null
,应该使用 ===
运算符:
let x = null; console.log(x === null); // true
在 ES12 中,typeof
运算符得到了扩展,可以用于判断更多的数据类型,例如:
typeof BigInt(42) // "bigint" typeof Symbol('foo') // "symbol" typeof Promise.resolve() // "object" typeof (async () => {})() // "object" typeof Math // "object"
空值运算符
JavaScript 中的空值表示缺少一个可用的值,有两种空值:null
和 undefined
。??
运算符是 ES12 中的新增运算符,它可以配合 typeof
运算符,用于检测一个值是否为 null
或 undefined
,并提供默认值。例如:
let x = null; console.log(x ?? 'default'); // "default" let y; console.log(y ?? 'default'); // "default" let z = 0; console.log(z ?? 'default'); // 0
如果运算符左侧的值为 null
或 undefined
,则返回右侧的默认值;否则返回左侧的值。需要注意的是,??
运算符只能检测 null
或 undefined
,不能检测其他类似空字符串、空数组等的值。
结合使用
typeof
运算符和 ??
运算符可以结合使用,用于检测一个变量的数据类型,并提供默认值。例如:
let x; console.log(typeof x !== 'undefined' ? x : 'default'); // "default" console.log(x ?? 'default'); // "default"
这两个写法都可以实现相同的功能,但是第二种写法更加简洁,易于理解和维护。
总结
ES12 中的 typeof
运算符和 ??
运算符是非常有用的特性,可以用于简化代码,并提高代码的可读性和可维护性。使用这些特性时,需要注意它们的限制和适用场景,才能发挥它们的最大价值。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6450aed8980a9b385b9a36f6