32 var class2type = {};
34 var toString = class2type.toString;
290 type: function( obj ) {
291 if ( obj == null ) {
292 return obj + "";
293 }
294 return typeof obj === "object" || typeof obj === "function" ?
295 class2type[toString.call(obj)] || "object" :
296 typeof obj;
297 }
536 jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function (i, name) {
537 class2type["[object " + name + "]"] = name.toLowerCase();
538 });
1.typeof只能返回number string boolean object function 这5中数据类型
数组、null、{}、用new String('')等返回的都是object没办法区分具体数据类型
2.instanceof可以检测array类型
[] instanceof Array //true
但是遇到iframe后就挂了,同一个窗口的标签之间不会共享一个 window
对象参考文档 参考文档
var iframe = document.createElement('iframe');
document.body.appendChild(iframe);
console.log(window.frames[window.frames.length-1]===window.self) //false
xArray = window.frames[window.frames.length-1].Array;
var arr = new xArray(1,2,3);
arr instanceof Array //false
3.在jQuery里用的是{}.toString.call(obj)的方法参考文档
Object.prototype.toString()方法的规范:
在toString方法被调用时,会执行下面的操作步骤:
1. 如果this的值为undefined,则返回"[object Undefined]"
.
2.如果this的值为null,则返回"[object Null]"
.
3.让O成为调用ToObject(this)的结果.
4.让class成为O的内部属性[[Class]]的值.
5.返回三个字符串"[object ", class, 以及 "]"连接后的新字符串.
通过call改变this的指向,从而判断数据类型