我经常使用var options = options || {}
作为默认的空对象。它通常用于初始化option对象,以防它没有被传递到函数调用的参数中。
事情是这样的,我在几个地方(博客文章,源代码)读到过,options || (options = {})
更好地表达了开发人员的意图。有没有人能详细解释一下?我看不出两者之间的功能差异,所以我一定是遗漏了一些东西。
-编辑
我在几个地方看到了Backbone.js源代码,比如https://github.com/documentcloud/backbone/blob/0.9.2/backbone.js#L273
我想我在jQuery的源代码中也看到了这一点。并在多种Js写作风格的指导下蓬勃发展。
-编辑2代码示例:
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 = {});
}
发布于 2012-11-19 20:15:04
没有真正的区别,假设你是指:
function fn(options) {
// type a
options = options || {};
// type b
options || (options = {});
}
主要是偏好的问题,我认为(a)要清楚得多,我不喜欢在LHS上没有赋值的声明。
发布于 2012-11-19 20:14:05
没有功能上的区别。
第二个构造只是(主观上)看起来它比第一个构造做得更多。
相反的论点是,第一个结构是一个常见的模式,因此更容易识别它所做的事情。
发布于 2012-11-19 20:42:32
这里有一个功能上的区别:一个使用var
,另一个不使用。如果当前作用域中不存在options
变量,那么使用var
要好得多,而不是冒着options
隐式泄漏到外部作用域的风险。
如果保证存在选项(例如,在参数包括options
的函数中),则这两个语句在功能上是相同的,因此问题简化为options = options || {}
与options || (options = {})
在风格上的相对优势。就我个人而言,我看不出有什么不同:两者都需要了解JavaScript的||
操作符是如何工作的,所以一旦你把这个因素从等式中去掉,我可能会更喜欢options = options || {}
,因为它更短更简单。在我看来,无论是哪种情况,开发人员的意图都是同样明确的。
https://stackoverflow.com/questions/13453537
复制相似问题