多语言展示
当前在线:1230今日阅读:75今日分享:44

js数组类型检测

这里分为四种情况分析:通过constructor[].constructor === Array; //true这种方法比较坑,不推荐,因为constructor是可以自己修改的。通过instanceof[] instanceof Array; //true犀牛书给出的解释是在页面中含多个窗体或者iframe,那么会产生很多执行环境,一个iframe下的数组不是另一个窗体下构造函数的实例。那么如果出现这种极端条件,instanceof也不推荐使用。通过Array.isArray在新版浏览器,IE9+都已经实现了原生方法Array.isArray([1,2]); //true通过toStingObject.prototype.toString.call([]) === '[object Array]'在一些博客和犀牛书给出的都是这种方法。因为之前对call语法,toString方法的疑惑,导致我只能死记硬背这句代码。最近在回顾继承有关知识,学到了call方法,这段代码意思是对[]调用Object对象原型下的toString方法,不同于数组原型下的toString的方法,之所以疑惑,因为数组下的toString是把一个数组转成字符串。为了屏蔽掉call方法的干扰。我做了一个小处理Array.prototype.toString=Object.prototype.toString;[].toString();// '[object Array]'验证出来了call的作用方法,同时也得出Array原型重写了toString方法(原型链关系推出来的)紧接着,我去了MDN查阅Object原型的toString方法,看看这究竟是什么鬼?原来这个返回对象类型字符串。同时像时间对象,正则对象,数学对象等等都能返回出来。vartoString=Object.prototype.toString;toString.call(newDate);// [object Date]toString.call(newString);// [object String]toString.call(Math);// [object Math]//Since JavaScript 1.8.5toString.call(undefined);// [object Undefined]toString.call(null);// [object Null]
推荐信息