javaScript中判断数据类型的四种方法

1.typeof既可以判断基本数据类型也可以判断引用数据类型

console.log(typeof 1);         //number
console.log(typeof 'hello');   //string
console.log(typeof true);      //boolean
console.log(typeof undefined);  //undefined
console.log(typeof function () { });  //function
console.log(typeof []);        //object
console.log(typeof {});        //object
console.log(typeof null);      //object

2.instanceof:用来判断一个实例是否属于某种类型,如果是返回true,否则返回false,利用的是原型链中的如果一个实例的原型链中出现过相应的构造函数则返回true,否则返回false

var dog = new Array()
console.log(dog instanceof Array);  //true
console.log(dog instanceof Object); //true

3.constructor:typeof不能判断出复杂的数据类型的具体类型是什么,而constructor就可以,constroctor也可以判断日期对象,数学对象的数据类型,但是不能用于判断null和undefined的,因为null的返回值是null,undefined的返回值是undefined(原理:在原型链中,每一个构造函数都有一个prototype,prototype中又会有一个constructor属性指向构造函数,每一个实例都可以使用原型中的constructor属性,每一个实例都有一个指针指向prototype)

let a = 1
console.log(a.constructor); //[Function: Number]
let b = 'a'
console.log(b.constructor); //[Function: String]
let c = true
console.log(c.constructor); //[Function: Boolean]
let d = {}
console.log(d.constructor); //[Function: Object]
let e = []
console.log(e.constructor); //[Function: Array]
// let f = null
// console.log(null.constructor);  //报错
// console.log(undefined.constructor); //报错

4.Object.prototype.toString.call()返回调用者的具体类型

console.log(Object.prototype.toString.call(1));   //[object Number]
console.log(Object.prototype.toString.call('a')); //[object String]
console.log(Object.prototype.toString.call(null));  //[object Null]
console.log(Object.prototype.toString.call(undefined));  //[object Undefined]
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]
console.log(Object.prototype.toString.call(true));  //[object Boolean]

从原型链的角度上说,所有的对象都能访问到Object原型上的toString()方法,但是很多的对象的toString()方法都被重写了,不再具有原本的功能,为了保证每个对象都能通过Object.prototype.toString()的检测所以调用call()来将Object.prototype.toString()给到调用者

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值