Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用typeof()区分javascript中的数组和哈希_Javascript - Fatal编程技术网

使用typeof()区分javascript中的数组和哈希

使用typeof()区分javascript中的数组和哈希,javascript,Javascript,可能重复: 在javascript中 typeof([]) 及 两者都返回“object” 如何在Javascript中可靠地区分数组和关联数组 我曾想过测试有问题的对象,看看它是否具有“length”属性(表示它将是一个数组),但接下来的内容也将被视为一个数组: {length:5} Javascript中不存在关联数组 数组只能有数字键。如果访问字符串键,实际上是在使用一个快捷方式,它与对象表示法完全相同 一个好主意是检查内部[[CClass]]值。为此,您需要调用Object.pr

可能重复:

在javascript中

typeof([])

两者都返回“object”

如何在Javascript中可靠地区分数组和关联数组

我曾想过测试有问题的对象,看看它是否具有“length”属性(表示它将是一个数组),但接下来的内容也将被视为一个数组:

{length:5}

Javascript中不存在关联数组

数组只能有数字键。如果访问字符串键,实际上是在使用一个快捷方式,它与对象表示法完全相同


一个好主意是检查内部
[[CClass]]
值。为此,您需要调用
Object.prototype.toString

var toStr = Object.prototype.toString;

toStr.call([]);  // === [object Array]
toStr.call({});  // === [object Object]

现代浏览器内置了
Array.isArray

对于较旧的浏览器,您可以测试该函数,并在必要时添加它

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

alert( Array.isArray( [] ) );

编辑:

:

15.4.3.2 Array.isArray(arg)

isArray函数接受一个参数arg,如果参数是类内部属性为“Array”的对象,则返回布尔值true;否则返回false。采取以下步骤:

  • 如果类型(arg)不是对象,则返回false
  • 如果arg的[[Class]]内部属性的值为“Array”,则返回true
  • 返回false

  • 呃,我想你已经把它倒过来了。普通JS对象是关联数组。javascript中不存在真正的数组。js中的数组是一个带有sugar的对象,使其看起来像一个真正的数组(最值得注意的是length属性,它只返回1+存储在对象中的最高数值字段)。
    if( typeof Array.isArray !== 'function' ) {
        Array.isArray = function( arr ) {
            return Object.prototype.toString.call( arr ) === '[object Array]';
        };
    }
    
    alert( Array.isArray( [] ) );