typeof和Object.prototype.toString.call()的区别

typeof

判断数据类型,只能区分基本类型,即“number”,“string”,“undefuned”,“boolean”,“object”五种。对于数组、对象来说,其关系错综复杂,使用typeof都会统一返回“object”字符串。

要想区分对象、数组单纯的用typeof是不行的。不过可以用instanceof方法

var a={};
var b=[];
var c=function (){};

//a,b,c都是Object的实例
console.log(a instanceof Object); // true
console.log(b instanceof Object); // true
console.log(c instanceof Object); // true

//只有Array类型的b才是Array的实例
console.log(a instanceof Array); //false
console.log(b instanceof Array); //true
console.log(c instanceof Array); //false

//只有Function类型才是c的实例
console.log(a instanceof Function); //false
console.log(b instanceof Function); //false
console.log(c instanceof Function); //true

从代码上看,要判断复合数据类型,可如下判断:

//对象
(a instanceof Object) && !(a instanceof Function) && !(a instanceof Function)
//数组
(a instanceof Object) && (a instanceof Array)
//函数
(a instanceof Object) && (a instanceof Function)

简便写法:Object.prototype.toString.call();

Object.prototype.toString.call()

由于JavaScript中一起都是对象,任何都不例外,对所有类型应用Object.prototype.toString.call()方法如下:

console.log(Object.prototype.toString.call(123)); //[object Number]
console.log(Object.prototype.toString.call("123")); //[object String]
consolr.log(Object.prototype.toString.call(undefined));//[object Undefined]
console.log(Object.prototype.toString.call(true));//[object Boolean]
console.log(Object.prototype.toString.call({})); //[object Object]
console.log(Object.prototype.toString.call([]));//[object Array]
console.log(Object.prototype.toString.call(function(){}))//[object Function]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值