js 检测数据类型方法

1. 万能检测法:

Object.prototype.toString.call('').slice(8, -1).toLowerCase()

// ‘string’

Object.prototype.toString.call([]).slice(8, -1).toLowerCase()

// ‘array’

2. 基础类型检测

// Numbers
typeof 37 === 'number';
typeof 3.14 === 'number';
typeof Math.LN2 === 'number';
typeof Infinity === 'number';
typeof NaN === 'number'; // 尽管NaN是"Not-A-Number"的缩写
typeof Number(1) === 'number'; // 但不要使用这种形式!
 
// Strings
typeof "" === 'string';
typeof "bla" === 'string';
typeof (typeof 1) === 'string'; // typeof总是返回一个字符串
typeof String("abc") === 'string'; // 但不要使用这种形式!
 
// Booleans
typeof true === 'boolean';
typeof false === 'boolean';
typeof Boolean(true) === 'boolean'; // 但不要使用这种形式!
 
// Symbols
typeof Symbol() === 'symbol';
typeof Symbol('foo') === 'symbol';
typeof Symbol.iterator === 'symbol';
 
// Undefined
typeof undefined === 'undefined';
typeof declaredButUndefinedVariable === 'undefined';
typeof undeclaredVariable === 'undefined'; 
 
// Objects
typeof {a:1} === 'object';
typeof null === 'object';
 
// 使用Array.isArray 或者 Object.prototype.toString.call
// 区分数组,普通对象
typeof [1, 2, 4] === 'object';
 
typeof new Date() === 'object';
 
// 下面的容易令人迷惑,不要使用!
typeof new Boolean(true) === 'object';
typeof new Number(1) === 'object';
typeof new String("abc") === 'object';
 
// 函数
typeof function(){} === 'function';
typeof class C{} === 'function'
typeof Math.sin === 'function';
typeof new Function() === 'function';

注: 不能检测 null , [] 返回"object"

3. 检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。

function Car(make, model, year) {
  this.make = make;
  this.model = model;
  this.year = year;
}
const auto = new Car('Honda', 'Accord', 1998);

console.log(auto instanceof Car);
// expected output: true

console.log(auto instanceof Object);
// expected output: true

注: 无法检测基本数据类型

4. constructor 

//数字
var num =12345
console.log(num.constructor) //ƒ Number() { [native code] }
//布尔值
console.log(true.constructor) //ƒ Boolean() { [native code] }
//字符串
var str = 'hello world'
console.log(str.constructor) // ƒ String() { [native code] }
//函数
function fun() {}
console.log(fun.constructor) // ƒ Function() { [native code] }
//数组
var arr=[1,2,3,4]
console.log(arr.constructor) // ƒ Array() { [native code] }
//对象
var obj = {name:'ZhangSan', age:25}
console.log(obj.constructor) // ƒ Object() { [native code] }

注: 不能检测 null 和 undefined

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值