是否可以将此“单例数组声明”写得更短?有不同的脚本可以为array
添加一些内容,但是它们是异步加载的,所以我不知道哪个会首先初始化array
。
var array = array || [];
array.push("foo");
console.debug(array[0]);
我试过这样的事情,但这不起作用:
(array || []).push("foo");
有什么建议吗?
答案 0 :(得分:1)
如果您需要保留现有变量(如果您不知道哪个代码将首先执行,则会发生这种情况),您的代码不能写得更短。
当然,如果需要,您可以更改默认值:
var array = array || ['foo'];
但如果该变量已存在,则不再添加foo
。可能不是你想要的。
旧答案
用你给出的例子:
var array = ['foo'];
答案 1 :(得分:0)
var array = [];
array.push("foo");
console.debug(array[0]);
如果您没有动态添加元素,那么这就足够了:
var array = ["foo"];
console.debug(array[0]);
更新
同样,如果您事先知道自己的元素,请执行
var array = array || ['foo']
答案 2 :(得分:0)
使用array || []
不知道你想要什么。但这就是你如何得到的:
var array = new Array("foo");
答案 3 :(得分:0)
最简单的方法是在尝试推送时检查数组是否已定义:
var array = typeof array === 'undefined' ? ['foo'] : array.push('foo');
为了便于阅读,您可能想要创建一个延迟加载的getter:
var addToArray = function (item) {
// ensure array is defined
if (typeof array === 'undefined') {
array = [].push(item);
}
// redefine this function as a reference to push
addToArray = array.push;
};
答案 4 :(得分:0)
只需使用括号表示法,因为它比使用新的Array()更快。 如果您需要动态添加项目,则需要使用.push(); - 或者自己处理数组的数字索引。
好的,没有阅读上面关于异步加载脚本的评论。为什么不在加载任何其他脚本之前声明你的数组,这样你可以确定你的数组是否存在?
答案 5 :(得分:0)
取决于您希望如何影响传入的数组
var newVals = (vals || []).concat(["c","d"]);
或
var newVals = [].concat((vals || []), ["c","d"]);