1.在ES5中区分js的数组和对象,是比较容易,直接用Arrar.isArray()
Array.isArray([]) //true Array.isArray({}) //false
这个属性在ie8或ie8一下是支持es5的这一属性
PS: es5的支持情况如下:
IE6是15年前的,所以不支持,IE7出来时ECMAScript5没出来,所以不支持,IE8支持一点,IE9支持更多,IE10完美支持了,IE11支持少量ECMAScript6。 http://kangax.github.io/compat-table/es5/ (ECMAScript5 test) http://kangax.github.io/compat-table/es6/ (ECMAScript6 test)
在ES5以前区分数组和和对象是比较困难,typeof在面对数组和对象是完全不起作用的。简单的区分就用到instanceof
[] istanceof Array //true ({}) instanceof Array //false
但是在浏览器有可能多个窗口或窗体(frame)存在,因此一个窗口的对象不是另外窗体的构造函数的实例。instanceof就不能作为一个可靠的检测数组的方法
解决方案是检测对象的类属性
var isArray = Function.isArray || function(o){ return typeof o === "object" && Object.prototype.toString.call(o) === "[object Array]"; } alert(Array.isArray([])) //true alert(Array.isArray({})); //false
时间: 2024-11-04 23:59:19