Object.prototype.toString.call()方法的应用

1、JS中判断数据类型可以使用typeof,如:
console.log(typeof(2)) //"number"
console.log(typeof("abc"))  //"string"
console.log(typeof(true))  //"boolean"
console.log(typeof(undefined))  //"undefined"
console.log(typeof(function fun(){}))  //"function"
console.log(typeof(null))  //"object"
console.log(typeof([1,2,3,4,5]))//"object"
console.log(typeof({}))  //"object"

可以看出:typeof只能区分基本类型,即:number、string、boolean、undefined、function、object,对于null、array、object来说使用typeof会统一返回“object”,要想区分对象、数组、函数是不行的,但是使用Object.prototype.toString.calll(obj)来判断某个对象属于某种内置类型。

2、使用Object.prototype.toString.calll(obj)来判断某个对象属于某种内置类型,如:
//判断基本类型
console.log(Object.prototype.toString.call(null));//[object Null]
console.log(Object.prototype.toString.call("jerry"));//[object String]
console.log(Object.prototype.toString.call(true));//[object Boolean]
console.log(Object.prototype.toString.call(12));//[object Number]
console.log(Object.prototype.toString.call(undefined));//[object Undefined]
//判断原生引用类型——数组类型
console.log(Object.prototype.toString.call([]));//[object Array]
//判断原生引用类型——函数类型
console.log(Object.prototype.toString.call(function(){}));//[object Function]
//判断原生引用类型——日期类型
console.log(Object.prototype.toString.call(new Date));//[object Date]
//判断原生引用类型——正则表达式类型
console.log(Object.prototype.toString.call(/\d/));//[object RegExp]
//判断原生引用类型——对象类型
console.log(Object.prototype.toString.call({name: "jerry"}));//[object Object]
//判断原生引用类型——自定义类型
function Person(){};
console.log(Object.prototype.toString.call(new Person));//[object Object]

可以看出:这种方法不能准确判断person是Person类的实例,而只能用instanceof 操作符来进行判断,如:

console.log(person instanceof Person); // true
3、判断原生JSON对象
var isNativeJSON = window.JSON && Object.prototype.toString.call(JSON);
console.log(isNativeJSON);  // [object JSON]

结果为 [object JSON] 说明JSON是原生的,否则不是;另外需要注意的是:Object.prototype.toString()本身是允许被修改的,前边的方法都是以toString()方法未被修改作为前提的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容