typeof(类型) 方法可以正确识别:number,boolean,Symbol,string,undefined,null,function的类型数据,而其他都会返回的是 object。
(判断对象) instanceof (类型) 这个判断方法返回的是boolean类型,虽然可以判断Object、Array,但是假设:判断一个数组,当类型输入object 或者 array 结果都返回为true 。
-
Object.prototype.toString()方法不接收参数,返回表示调用它的对象的值的字符串'[object,object]'。
思想:拿到对象的原始值的字符串类型
function typeOf(obj){
let res = Object.prototype.toString.call(obj).split(' ')[1]
.substring(0,res.lenght - 1).toLowerCase()
//用toString去拿到对象的原始值 '[Object,Array]'
//这里封装为函数,所以要将this指向参数对象apply()/call()/bind()都可以
//split('')[1]用来提取toString拿到的整个字符串需要的部分('Array]')
//因为上一步提取仍右不需要的']' 部分,所以需要使用substring(strat,end)区间提取
//toLowerCase()为转为小写,该步骤可选
}
function typeOf(obj){
return Object.prototype.toString.call(obj).slice(8,-1).toLowerCase()
//前二步骤与方法一相同
//在提取字符串可以区间提取,因为toString原始值的前8位都是固定的(即:'[Object,')
//ps:为什么方法一不直接用subString()方法,因为subString()当参数小于0时按0处理,
//则需要获取lenght值,
//而solice()参数如果大于0,则从前面计数,如果小于0,则从后面计数。
}