有没有办法防止字符串像多维数组一样运行

Is there a way to prevent strings from behaving like multi-Dimensional Arrays?

本文关键字:数组 运行 一样 字符串 有没有      更新时间:2023-09-26

我的问题是我有一些代码来检查数组是否是多维的。

if( typeof( ary[ 0 ][ 0 ] ) != 'undefined' )
{
    alert( "this array is 2 dimensional" );
}
else
{   
    alert( "this array is not 2 dimensional" )
}

这适用于仅由数字组成的数组。但是当我有充满字符串的数组时,例如

var ary = [ "one", "two", "three" ];

JavaScript 似乎使这个数组本质上是多维的。我可以通过以下方式访问每个字母:

alert( ary[ 0 ][ 0 ] );//This returns the letter "o" from "one"

问题是ary[ 0 ][ 0 ]typeof不是未定义的,而是一个字符串。那么,如果我的数组不是真正的二维,我如何使这个返回未定义呢?是的,我是新手,谢谢。

有没有办法防止字符串像多维数组一样运行?

你不能改变字符串的行为,不,但该测试也对其他问题开放。例如,它会说这是一个二维数组:

var obj = {0: {0: "foo"}}; // Yes, that's valid syntax. Rare, but valid.

相反,请考虑Array.isArray

if (Array.isArray(ary) && Array.isArray(ary[0]))
{
    alert( "this array is 2 dimensional" );
}
else
{   
    alert( "this array is not 2 dimensional" )
}

Array.isArray是在 ES5 中添加的,但对于非常旧的引擎来说可以很容易地填充:

if (!Array.isArray) {
    (function() {
        var toString = Object.prototype.toString;
        Array.isArray = function(arg) {
            return toString.call(arg) === "[object Array]";
        };
    })();
}

旁注:JavaScript 没有多维数组。它有数组,可以包含其他数组。仅仅因为在索引 0 处有一个数组并不意味着在索引 1 处有一个数组。

使用 Array.isArray 来检查对象是否是多维数组:

if (Array.isArray(ary) && Array.isArray(ary[0])) { ... }

请注意,Array.isArray 是 ES5 的补充,但如果您需要支持较旧的浏览器,jQuery 具有$.isArray和 lodash/underscore.js 具有_.isArray。如果您不使用其中任何一个,MDN 具有以下 polyfill:

if (!Array.isArray) {
  Array.isArray = function(arg) {
    return Object.prototype.toString.call(arg) === '[object Array]';
  };
}

你也可以使用像lodash这样的库。

检查此功能 https://lodash.com/docs#isArray

例如

if (_.isArray(ary) && _.isArray(ary[0]))
{
  alert( "this array is 2 dimensional" );
}
else
{   
  alert( "this array is not 2 dimensional" )
}