使用 OR 的 JavaScript 数组声明



我在研究一个项目时在下面发现了一个JavaScript行:

var array = array || [];    // <--- confusion here (what does || mean)

谁能告诉我为什么有人像上面这样声明数组而不是:
var array = [];

更新:在得到答案后,我想出了更易读的方法来执行上述操作:

if(array == undefined) 
    var array = [];

与简单var array = [];的区别在于,如果已经存在一个现有值,则该值不会替换为 []

它之所以有效,是因为

  • 如果新变量已在作用域中声明,则var不会声明新变量(变量声明被提升(
  • ||返回第一个非 falsy 值(例如定义的数组(

这相当于

var array; // does nothing if array is already declared in the same scope
if (!array) array = [];

当你有一个模块化代码并且不想强加导入顺序时,这种结构很常见:你可能有很多文件以同一行开头:

var myModule = myModule || {};

这里有一个例子:SpaceBullet源代码(看看js文件的第一行(。

这意味着:如果有一个值或数组被初始化,则将其分配给变量,否则,将此变量初始化为空数组。

您将看到类似的声明 {}

var someObject = anObject || {};

最新更新