如何在三元运算符中检查未定义的变量



我有三元操作问题:

let a = undefined ? "Defined!" : "Definitely Undefined",
    b = abc ? "Defined!" : "Definitely Undefined", // ReferenceError
    c = (abc !== undefined) ? "Defined!" : "Definitely Undefined", // ReferenceError
    d = (typeof abc !== "undefined") ? "Defined!" : "Definitely Undefined"
// results: a = d = "Definitely Undefined", 
// while b and c throw ReferenceError when abc is undefined

什么是最佳和短路在访问其属性之前检查ABC是否为undefined,并分配空白对象{}如果undefined

let a = [[best way to check abc]] ? {[abc.label1]: 2, [abc.label2]: 1} : {}

PS:我目前正在使用(typeof abc !== "undefined")代替[[best way to check abc]]

当abc不确定时,b和c抛出了参考

因此,abc不仅是不确定的,它是 undeclared 。那里有很大的区别。

如果您需要处理 abc是未确定的,则唯一安全的方法(没有 try/ catch(是 typeof

typeof abc === "undefined"

如果abc是未宣布的标识符,那将是正确的,没有错误。如果声明abc并包含值undefined

,也将是正确的

在访问其属性之前,检查abc是否不确定以及分配空白对象{}的最佳和简短方法是什么?

可能使用var来确保其声明:

var abc = abc || {};

重复的var声明不是错误(重复的let声明是(。因此,使用上述内容,如果abc未申请,则使用初始值undefined声明,我们将其分配给{}。如果被声明,我们将其值替换为{},如果它是虚假的。,如果可能使用letconst声明或可能不会声明,则以上也会丢弃错误。

因此,要处理可能使用letconst声明或可能不会声明的情况,我们完全需要一个不同的变量:

let ourabc = typeof abc === "undefined" || !abc ? {} : abc;

如果abc未宣布或包含虚假值,则将ourabc设置为{}。由于所有非null对象引用都是真实的,而且您说要访问对象属性,这可能是最短的方法。

   state = (typeof state !== "undefined") ? state : '';

这样,您可以检查三元运算符中的未定义变量。

在访问其属性之前,检查ABC是否不确定并分配空白对象{}(如果未定义(?

你说

我当前正在使用(abc!==" undefined"(

看来您已经定义了ABC,并且值为undefined

您可以尝试做

var a = abc || {};
console.log(a);

最新更新