我在学习项目时发现了以下javascript行:
var array = array || []; // <--- confusion here (what does || mean)
任何人都可以告诉我为什么有人像上面那样宣布数组而不是:
var array = [];
更新:在得到答案后,我想出了更可读的方法来执行上述操作:
if(array == undefined)
var array = [];
答案 0 :(得分:7)
与简单var array = [];
的区别在于,如果已存在现有值,则此值不会替换为[]
。
这是因为
var
如果已在范围内声明了新变量(variable declarations are hoisted),则不会声明新变量||
returns the first non falsy value(例如已定义的数组)这相当于
var array; // does nothing if array is already declared in the same scope
if (!array) array = [];
当你有一个模块化代码并且不想强制执行导入命令时,这种结构很常见:你可能有很多以同一行开头的文件:
var myModule = myModule || {};
以下是一个示例:SpaceBullet source code(查看js文件的第一行)。
答案 1 :(得分:2)
这意味着:如果有值或数组已初始化,请将其分配给变量,否则,将此变量初始化为空数组。
您将看到{}
的类似声明var someObject = anObject || {};