我对三元运算有疑问:
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
在访问其属性以及分配空白对象之前{}
if 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 抛出 ReferenceError
So abc
不仅仅是未定义,它是未申报的。这里面有很大的区别。
如果您需要处理abc
未声明,这是唯一安全的方法(没有try
/catch
)是与typeof
:
typeof abc === "undefined"
这将是正确的,没有错误,如果abc
是一个未声明的标识符。如果abc
已声明并包含值undefined
.
检查是否最好且最短的方法是什么abc
在访问其属性以及分配空白对象之前未定义{}
如果未定义?
可能正在使用var
确保其已声明:
var abc = abc || {};
复制var
声明不是错误(重复let
声明是)。那么有了上面的内容,如果abc
未声明,它以初始值声明undefined
我们分配它{}
。如果它被声明,我们将其值替换为{}
如果它是假的。But,如果可以或可以不声明let
or const
,那么上面也会抛出错误。
因此,要处理可能或可能不声明的情况let
or const
,我们需要一个完全不同的变量:
let ourabc = typeof abc === "undefined" || !abc ? {} : abc;
那套ourabc
to {}
if abc
未声明或者包含虚假值。由于所有非null
对象引用是真实的,并且您已经说过要访问对象属性,这可能是最短的方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)