以下 JavaScript 语法是什么意思?

问题描述 投票:0回答:4

我目前正在学习开发 javascript/jquery 插件,我注意到其中许多插件都具有以下语法:

var pluginName = window.pluginName || {};

我很难理解这意味着什么,特别是 OR 大括号部分。 如果有人可以阐明这在代码上下文中的含义,那就太好了。

javascript operators
4个回答
5
投票

翻译为:

var pluginName;
if (window.pluginName) {
    pluginName = window.pluginName;
} else {
    pluginName = {};
}

了解更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators


4
投票

如果

window.pluginName
null
undefined
(或其他 falsy,如
false
0
,但目的通常是检查
undefined
),则将设置变量
pluginName
指向一个空的对象。

此行依赖于 OR 来实现短路:如果第一个操作数是 falsy 值(false、或

null
undefined
),则表达式的结果将是第二个操作数:
{}
这是一个空物体。

这个想法是变量将被初始化为某个(可能是空的)对象。

这个带有空对象的短路的另一个实例用于 javascript 模块模式这里有一个关于模块模式的很好的教程,但具体请参阅“松散增强”部分。这是该部分的示例模块定义: var MODULE = (function (my) { // add capabilities... return my; }(MODULE || {}));

在该示例中,代码将通过调用
立即调用的函数表达式
,在全局命名空间中定义一个新模块(具有属性/函数集合的对象):第一次执行定义模块的函数时,它将传递一个空对象,其中将添加

功能(属性,函数)。

这是确保变量初始化为对象的一种方法,通常这样对象就可以添加数据和/或方法。如果框架将方法定义拆分到不同的文件中,则通常会使用它,这样设置库时就不会依赖文件加载的顺序。

0
投票
在这种情况下,“plugin”将被分配为插件的当前值,或者如果它还不存在,则为空对象。

这是 ekuusela 在其他答案之一中发布的代码的常用简写:

0
投票
var pluginName; if (window.pluginName) { pluginName = window.pluginName; } else { pluginName = {}; }

但是:我想补充一点,在某些用例中,这是一种不好的做法,它会导致微妙的错误(尽管这个特定的示例很好)。原因是
||
之前的第一个语句是假的,因此所有假语句都会导致第二个语句被执行,这并不总是您想要的。

示例:许多人使用此构造来测试参数是否已分配值,如果未分配默认值。例如:

function repeat(text, nrOfRepeats) { text = text || ''; nrOfRepeats = nrOfRepeats || 1; var i = 0, result = ''; for (i = 0 ; i < nrOfRepeats; i++) { result += text; } return result; }

当您像这样调用此函数时:
repeat('hello', 0)
,您希望返回一个空字符串,但您会返回“hello”。这是因为 0 参数是假的,并且

nrOfRepeats = nrOfRepeats || 1

 将解析为 1 而不是您给出的 0。 
所以使用这个结构时要小心。确保 
||

之前的第一个语句永远不会是假的(当您不希望它出现时)。这些值被认为是假值:0、假、未定义、null、NaN、''。

	

© www.soinside.com 2019 - 2024. All rights reserved.