如果数组还不存在,如何创建数组?


73

如果尚不存在该如何创建数组?换句话说,如何将变量默认为空数组?

Answers:


89

如果要检查是否存在数组x并创建(如果不存在),可以执行

x = ( typeof x != 'undefined' && x instanceof Array ) ? x : []

2
在大多数情况下,这是可行的,但是如果您打算检查从其他全局Array构造函数实例化的数组,则不会覆盖您-在跨框架编写脚本时可能会发生这种情况。
詹姆斯

1
那是真实的。一个人如何处理这种情况?
丰富

2
@Rich:在这里查看我的答案:stackoverflow.com/questions/1961528/…,它将在多帧DOM环境中正确运行。
Christian C.Salvadó09年

11
如今,正确的做法是使用Array.isArray(x)stackoverflow.com/a/38670091/271442
mynameistechno

null时不起作用。因此,完整的检查将是if (Array.isArray(array) && array.length)您可以在这里找到更多的信息stackoverflow.com/a/24403771/364951
Claudiu

65
var arr = arr || [];

17
但这不会检查arr是否为数组。
Gumbo

9
你是对的。从这个问题尚不清楚,是否需要事先检查它是否是一个数组,或者只是检查该变量是否已经定义。这是一个常见的习惯用法,比其他张贴的用法更简短。
布赖恩·坎贝尔

3
如果arr已经在相关范围内定义了,那为什么要打扰var ...呢?你可以做arr = arr || [];
詹姆斯

3
问题是检查数组是否已经存在,如果不存在则创建它。因此,您不知道它是否已经定义。如果您有多个文件要链接在一起,并且不知道首先加载哪个文件来定义它们都将共享的全局变量,则此惯用法非常有用。
布赖恩·坎贝尔

@BrianCampbell我可能是错的,但是除非在全球范围内运行,否则不会var被吊起,因此它总是会变成[]?编辑:nvm,我错了:D
whitfin

36
const list = Array.isArray(x) ? x : [x];

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray

或者,如果x 可能是一个数组,而您想确保它是一个:

const list = [].concat(x);

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/concat


x is not defined在这两种情况下都引发
huysentruitw

10
x是可能为数组的变量。您定义。这只是示例代码...
mynameistechno

12

您可以使用typeof运算符测试未定义,并使用instanceof运算符测试它是否为Array的实例:

if (typeof arr == "undefined" || !(arr instanceof Array)) {
    var arr = [];
}

您可以跳过第一个检查,因为undefined它不是Array的instanceof。
whitfin

2
@zackehh如果这样做,则可能会引发错误(如果arr尚未定义)
David

9

如果要检查的对象已经是一个数组,避免了众所周知的问题的的instanceof多框DOM环境中工作时操作,您可以使用Object.prototype.toString方法:

arr = Object.prototype.toString.call(arr) == "[object Array]" ? arr : [];

在这种情况下,@kangax声明不是必需的。
贾斯汀·约翰逊2009年

声明是必要的,但我认为很明显,如果arr未声明,ReferenceError将在作业的右侧抛出一个……
Christian C.Salvadó09年

0
<script type="text/javascript">

array1  = new Array('apple','mango','banana');
var storearray1 =array1;

if (window[storearray1] && window[storearray1] instanceof Array) {
    alert("exist!");
} else {
    alert('not find: storearray1 = ' + typeof storearray1)
    }

</script>   

-6

如果您在谈论浏览器环境,那么所有全局变量都是window对象的成员。因此要检查:

if (window.somearray !== undefined) {
    somearray = [];
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.