首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >` `var options = options || {}`与`options || (options = {})`的区别

` `var options = options || {}`与`options || (options = {})`的区别
EN

Stack Overflow用户
提问于 2012-11-19 20:10:40
回答 6查看 4K关注 0票数 6

我经常使用var options = options || {}作为默认的空对象。它通常用于初始化option对象,以防它没有被传递到函数调用的参数中。

事情是这样的,我在几个地方(博客文章,源代码)读到过,options || (options = {})更好地表达了开发人员的意图。有没有人能详细解释一下?我看不出两者之间的功能差异,所以我一定是遗漏了一些东西。

-编辑

我在几个地方看到了Backbone.js源代码,比如https://github.com/documentcloud/backbone/blob/0.9.2/backbone.js#L273

我想我在jQuery的源代码中也看到了这一点。并在多种Js写作风格的指导下蓬勃发展。

-编辑2代码示例:

代码语言:javascript
运行
复制
var func = function(param, options) {
   // How I do it
   var options = options || {};
   // How I should do it in the "same" way
   options = options || {};
   // The "other" way
   options || (options = {});

}
EN

回答 6

Stack Overflow用户

发布于 2012-11-19 20:15:04

没有真正的区别,假设你是指:

代码语言:javascript
运行
复制
function fn(options) {
    // type a
    options = options || {};

    // type b
    options || (options = {});
}

主要是偏好的问题,我认为(a)要清楚得多,我不喜欢在LHS上没有赋值的声明。

票数 5
EN

Stack Overflow用户

发布于 2012-11-19 20:14:05

没有功能上的区别。

第二个构造只是(主观上)看起来它比第一个构造做得更多。

相反的论点是,第一个结构是一个常见的模式,因此更容易识别它所做的事情。

票数 4
EN

Stack Overflow用户

发布于 2012-11-19 20:42:32

这里有一个功能上的区别:一个使用var,另一个不使用。如果当前作用域中不存在options变量,那么使用var要好得多,而不是冒着options隐式泄漏到外部作用域的风险。

如果保证存在选项(例如,在参数包括options的函数中),则这两个语句在功能上是相同的,因此问题简化为options = options || {}options || (options = {})在风格上的相对优势。就我个人而言,我看不出有什么不同:两者都需要了解JavaScript的||操作符是如何工作的,所以一旦你把这个因素从等式中去掉,我可能会更喜欢options = options || {},因为它更短更简单。在我看来,无论是哪种情况,开发人员的意图都是同样明确的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13453537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档