Javascript 有没有办法防止字符串像多维数组一样工作?

Javascript 有没有办法防止字符串像多维数组一样工作?,javascript,arrays,string,multidimensional-array,Javascript,Arrays,String,Multidimensional Array,我的问题是我有一些代码来检查数组是否是多维的 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" ]; Jav

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

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]的类型不是未定义的,而是一个字符串。那么,如果我的数组不是真正的二维数组,我如何使这个返回未定义呢?是的,我是新手和thx

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

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

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

而是考虑:

在ES5中添加了Array.isArray,但对于非常旧的发动机,可以轻松地进行填隙:

if (!Array.isArray) {
    (function() {
        var toString = Object.prototype.toString;
        Array.isArray = function(arg) {
            return toString.call(arg) === "[object Array]";
        };
    })();
}
旁注:JavaScript没有多维数组。它有数组,可以包含其他数组。索引0处有一个数组并不意味着索引1处有一个数组

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

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

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

而是考虑:

在ES5中添加了Array.isArray,但对于非常旧的发动机,可以轻松地进行填隙:

if (!Array.isArray) {
    (function() {
        var toString = Object.prototype.toString;
        Array.isArray = function(arg) {
            return toString.call(arg) === "[object Array]";
        };
    })();
}
旁注:JavaScript没有多维数组。它有数组,可以包含其他数组。索引0处有数组并不意味着索引1处有数组。

用于检查对象是否为多维数组:

if (Array.isArray(ary) && Array.isArray(ary[0])) { ... }
请注意,Array.isArray是ES5添加的,但如果需要支持较旧的浏览器,jQuery和lodash/underline.js都有。如果未使用其中任何一种,MDN具有以下polyfill:

if (!Array.isArray) {
  Array.isArray = function(arg) {
    return Object.prototype.toString.call(arg) === '[object Array]';
  };
}
用于检查对象是否为多维数组:

if (Array.isArray(ary) && Array.isArray(ary[0])) { ... }
请注意,Array.isArray是ES5添加的,但如果需要支持较旧的浏览器,jQuery和lodash/underline.js都有。如果未使用其中任何一种,MDN具有以下polyfill:

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

您还可以使用像lodash这样的库

检查此功能

例如


您还可以使用像lodash这样的库

检查此功能

例如


一方面,ary[0]的井类型将是字符串而不是对象。另一方面,ary[0]的井类型将是字符串而不是对象。完美。对于像我这样的新手来说,这个解释很容易理解。特别是当你展示了我的原始代码的变化和保持不变的时候。太完美了。对于像我这样的新手来说,这个解释很容易理解。特别是,您可以显示哪些更改并与我的原始代码保持一致。