https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/toString
js中监测变量类型的方法
使用typeof 判断变量类型
使用typeof 判断下变量类型看下:
不看不知道,一看吓一跳,竟然连
null
都是object
,所以用typeof 判断变量的类型是不靠谱的;
使用Object.prototype.toString.call(obj)
直接上测试结果所以结果显示这个方法还是比较靠谱的,(但是无法区分自定义对象类型,自定义类型可以采用instanceof区分
),所以这个方法判断基本类型的变量和内置变量是非常靠谱的;
为啥不直接用toString()方法呢
toString
方法的用法:toString
方法返回反映这个对象的字符串;对照
toString
的用法,我们看到图中的变量d
的返回和其他的变量有所区别,它返回的并不是"{"a":1,"b":1,"c":1}"
而是"[object Object]"
,这就是我们为什么要用Object.prototype.toString.call(obj)
来监测变量类型而不直接用toString
的原因了;
在js中所有的对象类型(Array,Date,Function等)都是Object的实例,Object有一个toString方法也被这些实例继承下来,但是这些实例都无一例外的重写了toString方法,根据原型链的知识,直接调用toString,调用的只是重写过后的toString方法,所以也就不会像Object那样返回带有类型的字符串了,
如果我们删除了一个实例的toString方法会怎么样呢?
哈哈 是不是和调用Object.prototype.toString.call(obj)一样了,这是因为删掉数组的toString方法后,数组只能去父级寻找toString方法,所以调用的自然就是Object的toString方法了