利用原型链顶端toString和typeof方法区分原始值,引用值以及包装类的值

原始值的类型有

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'

对于引用值ArrayObject和包装类(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]));


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值