我编写 Javascript 已经有一段时间了,但仍然不太确定我是不是太懒了。 我有很多:
if( typeof( something) === 'undefined' ){
// ..
}
然而,有时它会变得过于冗长。例如,现在我在做:
var redirectURLs = hotplate.get('hotCoreAuth/redirectURLs/success') || {};
那是因为在接下来的几行中,我将 redirectURL 视为一个对象,尽管它可能根本没有被定义(该函数很可能返回 undefined
)。
是否有“最佳实践”备忘单?是我上面写的太懒了吗?只是替代方案很麻烦:
var redirectURLs = hotplate.get('hotCoreAuth/redirectURLs/success');
if( typeof( redirectURLs ) === 'undefined' ){
redirectURLs = {}
}
我意识到快捷方式不太健壮,但话又说回来,人们要么设置了那个值,要么没有。
想法?
雇佣兵。
最佳答案
当您使用“快捷方式”时,相当于以下内容:
var redirectURLs = hotplate.get('hotCoreAuth/redirectURLs/success');
if (!redirectURLs) redirectURLs = {};
规范 ( ECMA-262 ) 声明逻辑 OR 运算符 (||
) 测试第一个表达式(在本例中为函数调用)是否强制转换为真——如果它强制为真,返回第一个表达式,否则返回第二个。
它还说明了什么强制转换为 true 和 false(§9.2 - 请注意,这不是逐字给出的):
False:
- The numbers +0, -0, and NaN
- The empty string (
""
)false
null
undefined
True: everything else (including stuff like
new Boolean(false)
)
因此,如果您不介意让大多数数字、字符串或值 true
通过,那么逻辑 OR“快捷方式”就可以了。请注意,如果 redirectURLs
为 null,您的“详细”代码可能会中断:
var redirectURLs = null;
if (typeof redirectURLs === 'undefined') {
redirectURLs = {};
}
redirectURLs.test = '1'; // TypeError: Cannot set property 'test' of null
关于javascript - 如何确保一个变量是一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17105942/