我在研究一个项目时在下面发现了一个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 || {};