js数据类型判断

js数据类型判断的4方法

typeof
instanceof
constructor
Object.prototype.toString.call()

1. typeof

1.typeof可以检测Number,String,Boolean,Undefined,Function的数据类型,返回对应的数据类型的小写字符。
2.对于利用构造函数创建的Number,String,Boolean都返回object
3.检测null,Array,Date,RegExp都会返回小写的object

		console.log(typeof 100);            // 'number'
        console.log(typeof 'a');          // 'string'
        console.log(typeof true);           // 'boolean'
        console.log(typeof undefined);      // 'undefined'
        console.log(typeof function(){});   // 'function'
        console.log(typeof null);           // 'object'
        console.log(typeof []);             // 'object'
        console.log(typeof {});             // 'object'
        console.log(typeof new Date());     // 'object'
        console.log(typeof /^123$/);        // 'object'
        console.log(typeof new Number(100));// 'object'
        console.log(typeof new String('abc'));// 'string'
        console.log(typeof new Boolean(true));//'boolean'

2. instanceof

instanceof运算符需要指定一个构造函数,或者说指定一个特定的类型,它用来判断这个构造函数的原型是否在给定对象的原型链上。

console.log([] instanceof Array);       //true
console.log({} instanceof Object);      //true
console.log(new Date() instanceof Date);//true
console.log(/^123$/ instanceof RegExp); //true
console.log(function(){} instanceof Function);  // true
console.log(new Number(100) instanceof Number); // true
console.log(100 instanceof Number);     // false
console.log(true instanceof Boolean);   // false
console.log('abc' instanceof String); //false
console.log(false instanceof Boolean); //false
console.log(undefined instanceof Object); //false

3.constructor

constructor是prototype对象上的属性,指向构造函数,根据实例对象寻找属性的顺序,若实例对象上没有实例属性或方法时,就去原型链上寻找,因此,实例对象也是能使用constructor属性的。

可以检测任何数据类型,除null,undefined,但是有一个隐患,他的指向容易改变。

let a = 10
console.log([].constructor == Array);       //true
console.log({}.constructor == Object);      //true
console.log(function(){}.constructor == Function);  //true
console.log(new Date().constructor == Date);        //true
console.log(/^123$/.constructor == RegExp);         //true
console.log(new Number(100).constructor == Number);//true
console.log(a.constructor == Number);       //true
console.log(true.constructor == Boolean);   //true
console.log('1'.constructor == String);     //true
console.log(null.constructor);      // 报错 没有原型
console.log(undefined.constructor); // 报错

除了undefined和null之外,其他类型都可以通过constructor属性来判断类型。

4. Object.prototype.toString.call()

console.log(Object.prototype.toString.call(123))//"[object Number]"
console.log(Object.prototype.toString.call('123'))//"[object String]"
console.log(Object.prototype.toString.call(true))//"[object String]"
console.log(Object.prototype.toString.call(null))//"[object Null]"
console.log(Object.prototype.toString.call(undefined))//"[object Null]"
console.log(Object.prototype.toString.call([]))//"[object Array]"
console.log(Object.prototype.toString.call({}))//"[object object]"
console.log(Object.prototype.toString.call(/^123$/))//"[object RegExp]"
console.log(Object.prototype.toString.call(new Date()))//"[object Date]"
console.log(Object.prototype.toString.call(function(){}))//"[object Function]"
5.还可以自己封装一个获取变量准确类型的函数
function gettype(obj) {
  var type = typeof obj;

  if (type !== 'object') {
    return type;
  }
  //如果不是object类型的数据,直接用typeof就能判断出来

  //如果是object类型数据,准确判断类型必须使用Object.prototype.toString.call(obj)的方式才能判断
  return Object.prototype.toString.call(obj).replace(/^\[object (\S+)\]$/, '$1');
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值