关于 undefined 的判断的坑

723 阅读1分钟

判断条件

我们经常会直接用表达式和变量转换成 Boolean 数据类型来当作判断条件

// 判断 obj 是否有属性 b, 如果存在,做啥啥啥
const obj = {
    a: "1",
}

// 首先,会想当然会这么写.....
if(obj.b) { // 结果是 false,但是 obj 有属性 b
    // do something
}

但是但是!

// 如果 b 是空字符串
const obj = {
    a: "1",
    b: ""
}
// 前面的判断会有问题

因为 if 语句中,0、空字符串、null、undefined 在转换时都会返回 false

// 正确的判断方式
if(typeof obj.b !== "undefined") {
   // do something
}

为什么不这样写呢?

// 正确的判断方式
if(obj.b !== undefined) {
   // do something
}

如果仅仅是实现前面的目标,那没有什么问题,但是如果是直接判断一个变量,如果变量没有定义就会报错,不利于代码的健壮性

if(x === undefined) {
   // do something
}
// 如果 x 未定义,会报错: “ReferenceError: x is not defined”

所以养成好习惯,用 typeof 来判断 undefined 这个基本类型吧