如何在JavaScript中检查数组是否存在(如果没有创建)?

ajs*_*sie 64 javascript arrays

如何检查特定阵列是否存在,如果不存在则会创建?

Ric*_*ich 79

如果要检查数组x是否存在并创建它,如果不存在,则可以执行此操作

x = ( typeof x != 'undefined' && x instanceof Array ) ? x : []
Run Code Online (Sandbox Code Playgroud)

  • 现在正确的方法是使用`Array.isArray(x)`:http://stackoverflow.com/a/38670091/271442 (8认同)
  • 这在大多数情况下都适用,但如果您计划检查从不同的全局`Array`构造函数实例化的数组,它将不会覆盖您 - 这可能在跨帧编写脚本时发生. (2认同)
  • @Rich:请在这里查看我的答案:http://stackoverflow.com/questions/1961528/javascript-check-if-array-exist-if-not-create-it/1961653#1961653,它会在多帧上正常运行DOM环境. (2认同)

Bri*_*ell 59

var arr = arr || [];
Run Code Online (Sandbox Code Playgroud)

  • 但这不会检查*arr*是否为数组. (15认同)
  • 你是对的.从问题中不清楚是否有必要检查它是否是一个数组,或者只是检查变量是否已经定义.这是一个常见的习语,比其他发布的更简单,更简单,所以我想我会发布它,让提问者决定是否足够. (9认同)
  • 如果`arr`已经在相关范围内定义,那么为什么要烦扰`var ...`?你可以做`arr = arr || [];` (3认同)
  • 问题是要检查数组是否已经存在,如果没有则创建它.因此,您不知道它是否已经定义.如果您要将多个文件链接在一起,并且不知道将首先加载哪个文件以定义它们将共享的某个全局变量,则此习惯用法很有用. (3认同)

myn*_*hno 27

const list = Array.isArray(x) ? x : [x];
Run Code Online (Sandbox Code Playgroud)

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray

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

const list = [].concat(x);
Run Code Online (Sandbox Code Playgroud)

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat

  • `x`是可以是数组的变量.你定义它.这只是示例代码...... (8认同)

Gum*_*mbo 12

您可以使用typeof运算符测试undefinedinstanceof运算符来测试它是否是Array的实例:

if (typeof arr == "undefined" || !(arr instanceof Array)) {
    var arr = [];
}
Run Code Online (Sandbox Code Playgroud)

  • @zackehh如果这样做,如果还没有定义`arr`,它可能会引发错误。 (2认同)

CMS*_*CMS 8

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

arr = Object.prototype.toString.call(arr) == "[object Array]" ? arr : [];
Run Code Online (Sandbox Code Playgroud)