原始值的类型有
number,string,boolean,undefined,null常用的引用值类型有:
Arrray ,Object,Functiontypeof能返回的值类型:
number,string,boolean,undefined,object,function从上我们可以知道,用typeof()判断原始值,对应返回的就是唯一的原始值(null除外)
console.log(typeof(123)); // 'number' console.log(typeof('123')) // 'string' console.log(typeof(true)) // 'boolean' console.log(typeof(undefined)) //'undefined' console.log(typeof(null)) // 'object'对于引用值Array,Object和包装类(new Number() ,new String() ,new Boolean)用typeof进行判断,则都返回的object
console.log(typeof([]) // 'object' console.log(typeof({}) // 'object' console.log(typeof(new Number())) //'object' console.log(typeof(new String())) //'object' console.log(typeof(new Boolean())) //'object'如何区分这些返回值都为object的值的类型 此时,需要用到原型链上的toString方法
首先先介绍一下toString()方法:这是原型链最顶端object默认的一个方法,任何对象都能从自己的原型链上继承该方法。
Object.prototype.toString()包装类的原型链顶端也是object,但包装类自身就有toString()方法,故由构造出来的对象向沿着原型链找toString方法时,找到的是包装类的方法,不会找到原型链的的顶端
var num = new Number(123); console.log(new num.toString()) //'123'当使用原型链顶端的toString方法时,就能区分出不同中值的类型(需用到call来改变this指向)
var num = new Number(123); var objStr = Object.prototype.toString console.log(objStr.call(num)) //"[object Number]" var str = new String('123'); var objStr = Object.prototype.toString console.log(objStr.call(num)) //"[object String]" var str = new Boolean(); var objStr = Object.prototype.toString console.log(objStr.call(num)) //"[object Boolean]" var arr =[]; var objStr = Object.prototype.toString console.log(objStr.call(arr)) //"[object Array]" var obj ={}; var objStr = Object.prototype.toString console.log(objStr.call(obj)) //"[object Object]"所以可以封装一个type函数来区分不同种类型的值
所以可以封装一个type函数来区分不同种类型的值 function disType(target) { // 一下typeof()返回的都是object var template = { '[object Array]': "array", '[object Object]': "object", '[object Number]': " number - object", '[object String]': "string - object", '[object Boolean]': "boolean - object" } if (target === null) { return null; } if (typeof (target) == 'object') { var str = Object.prototype.toString.call(target); return template[str]; }else{ return typeof(target); } } console.log(disType([1,2.3]));