墨生 发表于 2023-1-2 16:05:42

JavaScript数据类型检测实现方法详解

一、typeof



[*]优点:能快速判断基本数据类型,除了 Null;
[*]缺点:不能判别 Object、Array、Null ,都返回 object;判别引用类型除函数显示 function外,其他显示为 object
console.log(typeof 55);            // number
console.log(typeof true);            // boolean
console.log(typeof 'aa');            // string
console.log(typeof undefined);       // undefined
console.log(typeof function(){});    // function
console.log(typeof Symbol("foo"));   // symbol
console.log(typeof 553119869n);      // bigint
// 不能判别
console.log(typeof []);   // object
console.log(typeof {});   // object
console.log(typeof null); // object
二、instanceof

MDN:
instanceof 运算符 用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。
理解:判断在其原型链中能否找到该类型的原型。
语法:
object instanceof constructor function D(){}
var o = new D();
o instanceof D;// true
o instanceof Object; // true

[*]优点:能区分Array、Object和 Function,适用于判断自定义的类实例对象
[*]缺点:不能判断 Number,Boolean,String 基本数据类型
console.log(55 instanceof Number);                // false
console.log(true instanceof Boolean);             // false
console.log('aa' instanceof String);            // false
console.log([] instanceof Array);               // true
console.log(function(){} instanceof Function);    // true
console.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,非对象实例,因此返回 false
objStr instanceof String;    // true
newStr instanceof String;    // true
objStr instanceof Object;    // true      
myNonObj instanceof Object; // false,一种创建非 Object 实例的对象的方法
aDate instanceof Date;      // true
aDate instanceof Object;    // true
三、Object.prototype.toString.call()



[*]优点:精准判断数据类型,所有原始数据类型都是能判断;
[*]缺点:写法繁琐,最好进行封装后使用
var toString = Object.prototype.toString;
console.log(toString.call(55));         //
console.log(toString.call(true));         //
console.log(toString.call('aa'));         //
console.log(toString.call([]));         //
console.log(toString.call(function(){})); //
console.log(toString.call({}));         //
console.log(toString.call(undefined));    //
console.log(toString.call(null));         //
console.log(toString.call(Math));         //
console.log(toString.call(Set));          // Set 构造函数
console.log(toString.call(Array));      // Array 构造函数
console.log(toString.call(Map));          //
console.log(toString.call(Date));         //
console.log(toString.call(new Set()));    //
console.log(toString.call(new Array()));//
console.log(toString.call(new Map()));    //
console.log(toString.call(new Date()));   //
function D(){}
console.log(toString.call(D));            //
console.log(toString.call(new D()));      //
面试问题

如何判断变量是否为数组?
let arr = []
console.log(Array.isArray(arr));    // true
arr.__proto__ === Array.prototype;// true
arr instanceof Array;               // true
Object.prototype.toString.call(arr);// 判断是否是 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数据类型检测实现方法详解的文章就介绍到这了,更多相关JS数据类型检测内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

来源:https://www.jb51.net/article/266668.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: JavaScript数据类型检测实现方法详解