原始值的类型有
number,string,boolean,undefined,null
常用的引用值类型有:
Arrray ,Object,Function
typeof能返回的值类型:
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]));