繁体   English   中英

以下javascript语法是什么意思?

[英]What does the following javascript syntax mean?

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

var pluginName = window.pluginName || {};

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

转换为:

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

有关更多信息,请参见: https : //developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Logical_Operators

如果window.pluginNamenullundefined (或别的东西,像falsy false0 ,但目的通常是要检查undefined ),变量pluginName将被设置为指向一个空对象。

这行代码依赖于OR来短路 :如果第一个操作数是值(false, nullundefined ),则表达式的结果将是第二个操作数: {} ,这是一个空对象。

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

javascript 模块模式中使用了带有空对象的这种短路的另一个实例。 这是有关模块模式的很好的教程,但特别是请参见“ 宽松增强 ”部分。 这是该部分的示例模块定义:

var MODULE = (function (my) {
   // add capabilities...

   return my;
}(MODULE || {}));

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

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

在这种情况下,将为“插件”分配插件的当前值,或者如果该插件尚不存在空对象。

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

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参数是falsy并且nrOfRepeats = nrOfRepeats || 1 nrOfRepeats = nrOfRepeats || 1将解析为1,而不是您给出的0。

因此,在使用此结构时要小心。 确保||之前的第一条语句 当您不希望它成为现实时,它永远不会虚假。 这些值被认为是虚假的:0,false,undefined,null,NaN,''。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM