内置对象就是JS本事保留的一些对象,像object,array,data,reg,string等这些就是内置的对象(跟保留变量的意思差不对)就是不用你定义,自然而然就在JS里定义好的对象,你拿过来就能用的就是JS的内置对象。
静态对象就是全局对象,可以在整个JS里调用的公共对象。有点类似于全局变量
动态对象就是普通的对象了,可以理解为局部对象,只能在某个范围内使用的就是动态对象
示例:array json null date reg error 全部检测成object类型 ;
示例:function User(){} var u=newUser; console.log( u instanceof User );//true
示例:对于变量num num.constructor可以指向num的构造函数 所以可以使用 num.constructor == Number来判断num是不是Number类型的。
function User(){} var u=newUser; console.log( u.constructor===User);//得到true
在检测某个对象到底是原生对象还是开发人员自定义的对象的时候,也会出现问题。出现这个问题的原因是浏览器开始原生支持JSON对象了。因为很多人一直在使用JSON库,而该库定义了一个全局JSON对象。于是开发人员很难确定页面中的JSON对象到底是不是原生。
alert(object.prototype.toString.call(value)); //[object Array]
由于原生数组的构造函数名与全局作用域无关,因此使用toString()就能保证返回一致的值。
function isArray(value){
return object.prototype.toString.call(value) == [object Array]
}
同理,也可以基于之一思想来测试某个值是不是原生函数或正则表达式:
function isFunction(value){
return object.prototype.toString.call(value) == [object Function ]
}
function isRegExp(value){
return object.prototype.toString.call(value) == [object RegExp ]
}
结果就是上一种方法输出的结果的第二个参数
原理:其实jquery就是用 object.prototype.toString.call实现的,把用 object.prototype.toString.call输出结果的字符串数组里面的两个值转换成一个结果类型并返回,若class2type()存储的没有这个变量的类型,那就返回“object”