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

Kir*_*kya 5 javascript typescript ecmascript-6

我有三元操作的问题:

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
Run Code Online (Sandbox Code Playgroud)

什么是最好的和短期的方式来检查,如果ABC是undefined访问其属性之前以及分配空白对象{},如果undefined

let a = [[best way to check abc]] ? {[abc.label1]: 2, [abc.label2]: 1} : {}
Run Code Online (Sandbox Code Playgroud)

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

T.J*_*der 10

当abc未定义时,b和c抛出ReferenceError

所以abc不仅仅是未定义,它是未宣布的.那里有很大的不同.

如果您需要处理abc未声明的问题,那么唯一安全的方法(没有try/ catch)是typeof:

typeof abc === "undefined"
Run Code Online (Sandbox Code Playgroud)

如果abc是未声明的标识符,那将是真的,没有错误.如果abc声明并包含值,也将如此undefined.

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

可能var用于确保声明:

var abc = abc || {};
Run Code Online (Sandbox Code Playgroud)

重复var声明不是错误(重复let声明).因此,如果abc是未声明的,则使用初始值声明它undefined并分配它{}.如果它被声明,我们用它的值替换它的值{}.但是,如果它可能会或可能不会用let或声明const,那么上面也会抛出错误.

因此,要处理它可能会或可能不会与声明的情况下,let或者const,我们需要一个不同的变量完全:

let ourabc = typeof abc === "undefined" || !abc ? {} : abc;
Run Code Online (Sandbox Code Playgroud)

这设置ourabc{}if abc是未声明的,或者它是否包含有价值的值.由于所有非null对象引用都是真实的,并且您已经说过要访问对象属性,这可能是最短的方式.


muj*_*nly 8

   state = (typeof state !== "undefined") ? state : '';
Run Code Online (Sandbox Code Playgroud)

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


Sur*_*tta 6

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

你这么说

我目前正在使用 (typeof abc !== "undefined")

看起来您已经定义了 abc 并且值为undefined

你可以尝试做

var a = abc || {};
console.log(a);
Run Code Online (Sandbox Code Playgroud)