如何确保变量是一个对象

Mer*_*erc 5 javascript variables design-patterns

我已经编写了一段时间的Javascript,但仍然不太确定我是不是太懒了.我有很多:

if( typeof( something) === 'undefined' ){
  // ..
}
Run Code Online (Sandbox Code Playgroud)

但是,有时候它变得过于冗长.例如,现在我在做:

var redirectURLs = hotplate.get('hotCoreAuth/redirectURLs/success') || {};
Run Code Online (Sandbox Code Playgroud)

这是因为在以下几行中我将redirectURL视为一个对象,尽管它可能根本没有定义(该函数可能会返回undefined).

是否有"最佳实践"备忘单?我上面写的是不是太懒了?只是替代方案很麻烦:

var redirectURLs = hotplate.get('hotCoreAuth/redirectURLs/success');
if( typeof( redirectURLs ) === 'undefined' ){
  redirectURLs = {}
}
Run Code Online (Sandbox Code Playgroud)

我意识到快捷方式不那么健壮,但是再一次,人们要么设置了这个值,要么不设置.

想法?

芝加哥商业交易所.

Qan*_*avy 0

当您使用“快捷方式”时,相当于以下内容:

\n\n
var redirectURLs = hotplate.get(\'hotCoreAuth/redirectURLs/success\');\nif (!redirectURLs) redirectURLs = {};\n
Run Code Online (Sandbox Code Playgroud)\n\n

规范 ( ECMA-262 ) 规定逻辑 OR 运算符 ( ||) 测试第一个表达式(在本例中为函数调用)是否强制为 true - 如果它强制为 true,则返回第一个表达式,否则返回第二个。

\n\n

它还说明了强制为真和假的内容(\xc2\xa79.2 - 请注意,这不是逐字给出的):

\n\n
\n

错误的:

\n\n
    \n
  • 数字 +0、-0 和 NaN
  • \n
  • 空字符串 ( "")
  • \n
  • false
  • \n
  • null
  • \n
  • undefined
  • \n
\n\n

正确:其他一切(包括类似的东西new Boolean(false)

\n
\n\n

因此,如果您不介意让大多数数字、字符串或值true通过,那么逻辑“或”“快捷方式”就可以了。redirectURLs请注意,如果为 null,您的“详细”代码可能会中断:

\n\n
var redirectURLs = null;\nif (typeof redirectURLs === \'undefined\') {\n  redirectURLs = {};\n}\nredirectURLs.test = \'1\'; // TypeError: Cannot set property \'test\' of null\n
Run Code Online (Sandbox Code Playgroud)\n