博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Object.prototype.toString.call(obj) 为什么有用以及疑惑点
阅读量:4511 次
发布时间:2019-06-08

本文共 1542 字,大约阅读时间需要 5 分钟。

能检测的方法很多 基本上的疑惑点是如何检测object null array function,能准确的检测出来这几个的都是好方法

typeof 0;  //number;typeof true;  //boolean;typeof undefined;  //undefined;typeof "hello world"   //string;typeof function(){};   //function;typeof null; //objecttypeof {};  //object;typeof []; //object

 

1. typeof 为什么不准

  因为当他在检测null array object的时候  都是object,这是因为这几个都是Object重写的实例  这个也会帮助我们理解标题的疑惑

2.Object.prototype.toString.call(obj) 为什么有用

  toString方法返回反映这个对象的字符串

  为什么它就能准确判断类型呢,为什么用Object.tostring 方法就不行呢

  还是那一句话 null array object都是Object重写的实例 他们是有自己的tostring的方法 按照原型链的思路,会优先使用重写后的tostring方法,而我们只想用原型链上的tostring的方法

  验证

var arr=[1,2,3];console.log(Array.prototype.hasOwnProperty("toString"));//trueconsole.log(arr.toString());//1,2,3delete Array.prototype.toString;//delete操作符可以删除实例属性console.log(Array.prototype.hasOwnProperty("toString"));//falseconsole.log(arr.toString());//"[object Array]"

  当我们删除了array自己的tostring方法后 再次访问会调用原型链后的方法 跟Object.prototype.tostring(obj)一样了

 

扩展:其他能检测类型的方法

  1. instanceof 

  可以检测是否是该原型的实例

// 判断 foo 是否是 Foo 类的实例function Foo(){} var foo = new Foo(); console.log(foo instanceof Foo)//true

 缺点:1.因为数组属于object中的一种,所以数组instanceof object,也是true.

var a={};a instanceof Object  //truea intanceof Array     //falsevar b=[];b instanceof Array  //trueb instanceof  Object //true

  缺点:2.instanceof不能区分基本类型string和boolean,除非是字符串对象和布尔对象

var c='abc';c instanceof String; //falsevar d=new String();d instanceof String  //true

  2.constructor 

  除了undefined和null,其他类型的变量均能使用constructor判断出类型.

  缺点:这个方法容易被改写

  

转载于:https://www.cnblogs.com/web-chuan/p/11578008.html

你可能感兴趣的文章
asp.net的一个简单简历缓存方法
查看>>
loj 1185(bfs)
查看>>
HTML5 (三)本地存储
查看>>
全排列-按从大到小-time limited
查看>>
nginx https使用
查看>>
task_13
查看>>
linux下删除特殊符号
查看>>
大话设计模式--责任链模式
查看>>
杭电ACM 素数判定
查看>>
PAT 1079. 延迟的回文数
查看>>
PAT 1002. A+B for Polynomials
查看>>
PAT 1087 有多少不同的值
查看>>
ROS内usb_cam包使用注意事项
查看>>
[Leetcode] Bulls and Cows
查看>>
javaWeb基础核心之一Servlet
查看>>
减肥中,做个 体重三围 测量软件
查看>>
windows下命令行修改系统时间;修改系统时间的软件
查看>>
[LeetCode] 384. Shuffle an Array 数组洗牌
查看>>
最大公约数
查看>>
序列化和反序列化
查看>>