javascript - 如何确保一个变量是一个对象

标签 javascript variables design-patterns

我编写 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/

相关文章:

Mysql数据库设计一张表多键值行性能如何?

javascript - jQuery.load();并不总是用图像射击

javascript - 让功能更加高效

javascript - currentTime是否落在18 :00 and 2:00之间

Python:如何导入所有变量?

Javascript - 如何使 ping 结果始终按照数组变量的原点顺序

c++ - 这种编译时确定继承的模式有名字吗?

javascript - jquery,触发链接点击与另一个点击问题?

php - 美元 ($) 登录密码字符串被视为变量

java - Scanner 为什么要实现 Iterator<String>?