有可能写这个javascript数组声明更短吗?

时间:2012-10-11 12:47:24

标签: javascript ecmascript-5

是否可以将此“单例数组声明”写得更短?有不同的脚本可以为array添加一些内容,但是它们是异步加载的,所以我不知道哪个会首先初始化array

var array = array || [];
    array.push("foo");

console.debug(array[0]);

我试过这样的事情,但这不起作用:

(array || []).push("foo");

有什么建议吗?

6 个答案:

答案 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"]);
相关问题