可能重复:
我在js中有这一行,它很简单,但我不确定最后一部分做什么- (xin || {})
。
var xin = (function (name) {return name;}(xin || {}));
据我所知,鑫是一个对象构造函数,所以现在我可以创建辛的对象了。只是不太确定xin || {}
会做什么。有人能指点我一下吗,谢谢
发布于 2011-11-21 16:07:24
xin || {}
与以下相同:
xin ? xin : {};
或者,以更长的形式:
if(xin) {
return xin;
}
else {
return {};
}
编辑: See linked duplicate question。jAndy很好地表达了这一点:
||
是逻辑OR
。
表达式
var x = x OR {};
应该会变得更明显。
如果x
有一个falsy值(如null
、undefined
、0
、""
),我们将为x
分配一个空对象{}
,否则只保留当前值。很长的版本看起来就像
var x = x ? x : {};
发布于 2011-11-21 16:06:57
如果变量xin
不是false (或未定义或null)或新对象({}
),则该变量的值应归因于该变量的值;
例子:
var name = xin || {};
这被翻译成:
if(xin)
var name = xin;
else
name = {};
在javascript中,您可以使用条件运算符(||
和&&
)来创建表达式。下面是一个例子:
typeof f === 'function' && ((arguments.length == 0 && f()) || f.apply({},arguments)) || g();
这个表达式可以翻译成以下内容:
if(typeof f === 'function')
{
if(arguments.length == 0)
f();
else
f.apply({},arguments);
}
else
g();
无论如何,这只是为了演示目的,您不应该使用用条件运算符构建的大型嵌套表达式,因为它非常不可读(因此很难维护)。
这种表达式通常用于初始化,如果您不想覆盖某个值,如果它已经存在的话。一个很好的例子是在多个js文件中使用名称空间。使用此技术(var namespace = namespace || {};
),您可以在所有文件中共享相同的命名空间,而无需覆盖它。
发布于 2011-11-21 16:06:55
如果信是真实的,它会被评价为鑫,否则就会使用一个新的对象。
https://stackoverflow.com/questions/8214702
复制相似问题