本文小编为大家详细介绍“JavaScript数据类型检测功能如何实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“JavaScript数据类型检测功能如何实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
一、typeof
优点:能快速判断基本数据类型,除了
Null
;缺点:不能判别
Object
、Array
、Null
,都返回object
;判别引用类型除函数显示function
外,其他显示为object
console.log(typeof 55); // numberconsole.log(typeof true); // booleanconsole.log(typeof 'aa'); // stringconsole.log(typeof undefined); // undefinedconsole.log(typeof function(){}); // functionconsole.log(typeof Symbol("foo")); // symbolconsole.log(typeof 553119869n); // bigint// 不能判别console.log(typeof []); // objectconsole.log(typeof {}); // objectconsole.log(typeof null); // object
二、instanceof
MDN:
instanceof
运算符 用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。
理解:判断在其原型链中能否找到该类型的原型。
语法:
object instanceof constructor
function D(){}var o = new D();o instanceof D; // trueo instanceof Object; // true
优点:能区分
Array
、Object
和Function
,适用于判断自定义的类实例对象缺点:不能判断
Number
,Boolean
,String
基本数据类型
console.log(55 instanceof Number); // falseconsole.log(true instanceof Boolean); // false console.log('aa' instanceof String); // false console.log([] instanceof Array); // trueconsole.log(function(){} instanceof Function); // trueconsole.log({} instanceof Object); // true
String 对象和 Date 对象都属于 Object 类型 和 一些特殊情况:
var simpleStr = "a simple string";var objStr = new String();var newStr = new String("String created with constructor");var aDate = new Date();var myNonObj = Object.create(null);simpleStr instanceof String; // false,非对象实例,因此返回 falseobjStr instanceof String; // truenewStr instanceof String; // trueobjStr instanceof Object; // true myNonObj instanceof Object; // false,一种创建非 Object 实例的对象的方法aDate instanceof Date; // trueaDate instanceof Object; // true
三、Object.prototype.toString.call()
优点:精准判断数据类型,所有原始数据类型都是能判断;
缺点:写法繁琐,最好进行封装后使用
var toString = Object.prototype.toString;console.log(toString.call(55)); // [object Number]console.log(toString.call(true)); // [object Boolean]console.log(toString.call('aa')); // [object String]console.log(toString.call([])); // [object Array]console.log(toString.call(function(){})); // [object Function]console.log(toString.call({})); // [object Object]console.log(toString.call(undefined)); // [object Undefined]console.log(toString.call(null)); // [object Null]console.log(toString.call(Math)); // [object Math]console.log(toString.call(Set)); // [object Function] Set 构造函数console.log(toString.call(Array)); // [object Function] Array 构造函数console.log(toString.call(Map)); // [object Function]console.log(toString.call(Date)); // [object Function]console.log(toString.call(new Set())); // [object Set]console.log(toString.call(new Array())); // [object Array]console.log(toString.call(new Map())); // [object Map]console.log(toString.call(new Date())); // [object Date]function D(){}console.log(toString.call(D)); // [object Function]console.log(toString.call(new D())); // [object Object]
面试问题
如何判断变量是否为数组?
let arr = []console.log(Array.isArray(arr)); // truearr.__proto__ === Array.prototype; // truearr instanceof Array; // trueObject.prototype.toString.call(arr);// [object Array]
判断是否是 Promise 对象
function isPromise(val) { return ( typeof val.then === 'function' && typeof val.catch === 'function' )}let p = new Promise((resolve, reject) => {});console.log(isPromise(p)); // true
读到这里,这篇“JavaScript数据类型检测功能如何实现”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。