在javascript中
typeof([])
Run Code Online (Sandbox Code Playgroud)
和
typeof({})
Run Code Online (Sandbox Code Playgroud)
都返回"对象".
如何在Javascript中可靠地区分数组和关联数组?
我曾想过测试有问题的对象,看看它是否具有"length"属性(表明它是一个数组),但是下面的内容也会被视为一个数组:
{length:5}
Run Code Online (Sandbox Code Playgroud)
use*_*716 16
现代浏览器已Array.isArray内置.
对于旧版浏览器,您可以测试该功能并在必要时添加.
if( typeof Array.isArray !== 'function' ) {
Array.isArray = function( arr ) {
return Object.prototype.toString.call( arr ) === '[object Array]';
};
}
alert( Array.isArray( [] ) );
Run Code Online (Sandbox Code Playgroud)
编辑:
Array.isArray是ECMAScript 5的一部分:
15.4.3.2 Array.isArray(arg)
isArray函数接受一个参数arg,如果参数是类内部属性为"Array"的对象,则返回布尔值true; 否则返回false.采取以下步骤:
- 如果Type(arg)不是Object,则返回false.
- 如果arg的[[Class]]内部属性的值是"Array",则返回true.
- 返回false.
一个好主意是检查内部[[CClass]]价值。为此,您需要调用Object.prototype.toString:
var toStr = Object.prototype.toString;
toStr.call([]); // === [object Array]
toStr.call({}); // === [object Object]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7573 次 |
| 最近记录: |