我有三元操作问题:
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
声明,我们将其分配给{}
。如果被声明,我们将其值替换为{}
,如果它是虚假的。但,如果可能使用let
或const
声明或可能不会声明,则以上也会丢弃错误。
因此,要处理可能使用let
或const
声明或可能不会声明的情况,我们完全需要一个不同的变量:
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);