js数据检测及为什么优先选用obejct.prototype.toString.call()

	在js中,数据检测的方法有多种。
	包括但不限于typeof、instanceof、array.isArray等方法,如其中的typeof 识别的是数据类型,但是无法识别null和array . 引用类型是用instanceof, 而数组则是使用arrary.isarray。
	但是object.protype.tostring.call可以识别到null 和array。
	前三种已经满足了基本需要,但是这里使用object.protype.tostring.call的原因,不仅是object.protype.tostring.call的检测方法更为安全,实现一个函数的clone,可以对js的5种数据类型进行值复制。

因为toString是object的原型方法,而array、function等类型作为object的实例,都将toString()方法进行了重写。
不同的对象类型调用toString()方法时,根据原型链的知识,调用的是对应的重写后的toString()方法,(function类型返回的内容为函数题的字符串,array类型返回的是元素组成的字符串。。。),并不会去调用object上原型的toString()方法(返回对象的具体类型),所以采用obj .toString() 方法并不能得到其对象类型,只能将obj转化为字符串类型;因此,在想要得到对象的具体类型时,应该调用object上的toString()放大
可以更加准确的判断某个变量的类型。

例如:

 this._rulesIsObj = (Object.prototype.toString.call(this._rules) === '[object Object]');

思考:同时作为检测数据类型的方法,为什么会更加推荐使用原型方法obejct.prototype.toString.call(),而不是typeof,这两种方法之间有什么区别?

创建一个变量有两种方法:

var a = "s";//对象变量法
var b = new Object("s")//构造函数

当数据的值分别是undefined和null时,typeof输出的值都是object ,无法区别两个值

const b = "";
var a = new Object("undefined");
const c = Object.prototype.toString.call(a);
console.log(c,"a");
const d = Object.prototype.toString.call(b);
console.log(d,"b");
const e = typeof(a);console.log(e,":e");
const f = typeof(b);console.log(f,":f")```
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值