专业游戏门户,分享手游网游单机游戏百科知识攻略!

嗨游网
嗨游网

JavaScript怎么判断数据类型?8 种方式分享

来源:小嗨整编  作者:小嗨  发布时间:2024-03-14 09:23
摘要:javascript怎么判断数据类型?本篇文章给大家分享js判断数据类型的8种方式,有效帮助工作和面试,面试官看了微微一笑。1、typeof只能识别基础类型和引用类型注意:null、NaN、document.all的判断cons...

javascript怎么判断数据类型?本篇文章给大家分享js 判断数据类型的 8 种方式,有效帮助工作和面试,面试官看了微微一笑。

JavaScript怎么判断数据类型?8 种方式分享

1、typeof只能识别基础类型和引用类型

注意:nullNaNdocument.all 的判断

console.log(typeof null); // objectconsole.log(typeof NaN); // numberconsole.log(typeof document.all); // undefined
登录后复制
2、constructorconstuctor 指向创建该实例对象的构造函数

注意 nullundefined 没有 constructor,以及 constructor 可以被改写

String.prototype.constructor = function fn() {  return {};};console.log("云牧".constructor); // [Function: fn]
登录后复制
3、instanceof语法:obj instanceof Type功能:判断 obj 是不是 Type 类的实例,只可用来判断引用数据实现思路: Type 的原型对象是否是 obj 的原型链上的某个对象注意:右操作数必须是函数或者 class

手写 instanceof

function myInstanceof(Fn, obj) {  // 获取该函数显示原型  const prototype = Fn.prototype;  // 获取obj的隐式原型  let proto = obj.__proto__;  // 遍历原型链  while (proto) {    // 检测原型是否相等    if (proto === prototype) {      return true;    }    // 如果不等于则继续往深处查找    proto = proto.__proto__;  }  return false;}
登录后复制
4、isPrototypeof是否在实例对象的原型链上基本等同于 instanceof
console.log(Object.isPrototypeOf({})); // falseconsole.log(Object.prototype.isPrototypeOf({})); // true  期望左操作数是一个原型,{} 原型链能找到 Object.prototype
登录后复制
5、Object.prototype.toString利用函数动态 this 的特性
function typeOf(data) {  return Object.prototype.toString.call(data).slice(8, -1);}// 测试console.log(typeOf(1)); // Numberconsole.log(typeOf("1")); // Stringconsole.log(typeOf(true)); // Booleanconsole.log(typeOf(null)); // Nullconsole.log(typeOf(undefined)); // Undefinedconsole.log(typeOf(Symbol(1))); // Symbolconsole.log(typeOf({})); // Objectconsole.log(typeOf([])); // Arrayconsole.log(typeOf(function () {})); // Functionconsole.log(typeOf(new Date())); // Dateconsole.log(typeOf(new RegExp())); // RegExp
登录后复制
6、鸭子类型检测检查自身属性的类型或者执行结果的类型通常作为候选方案例子:kindofp-is-promise

p-is-promise:

const isObject = value =>  value !== null && (typeof value === "object" || typeof value === "function");export default function isPromise(value) {  return (    value instanceof Promise ||    (isObject(value) && typeof value.then === "function" && typeof value.catch === "function")  );}
登录后复制

kindof:

function kindof(obj) {  var type;  if (obj === undefined) return "undefined";  if (obj === null) return "null";  switch ((type = typeof obj)) {    case "object":      switch (Object.prototype.toString.call(obj)) {        case "[object RegExp]":          return "regexp";        case "[object Date]":          return "date";        case "[object Array]":          return "array";      }    default:      return type;  }}
登录后复制
7、Symbol.toStringTag原理:Object.prototype.toString 会读取该值适用场景:需自定义类型注意事项:兼容性
class MyArray {  get [Symbol.toStringTag]() {    return "MyArray";  }}const arr = new MyArray();console.log(Object.prototype.toString.call(arr)); // [object MyArray]
登录后复制
8、等比较原理:与某个固定值进行比较适用场景:undefinedwindowdocumentnull

underscore.js:

总结
方法基础数据类型引用类型注意事项
typeof×NaN、object、document.all
constructor√ 部分可以被改写
instanceof×多窗口,右边构造函数或者class
isPrototypeof×小心 null 和 undefined
toString小心内置原型
鸭子类型-不得已兼容
Symbol.toString Tag×识别自定义对象
等比较特殊对象
加餐:ES6 增强的 NaNNaN 和 Number.NaN 特点

typeof 后是数字

自己不等于自己

delete 不能被删除

isNaN如果非数字,隐式转换传入结果如果是 NaN,就返回 true,反之返回 false
console.log(isNaN(NaN)); // trueconsole.log(isNaN({})); // true
登录后复制Number.isNaN判断一个值是否是数字,并且值是否等于 NaN
console.log(Number.isNaN(NaN)); // trueconsole.log(Number.isNaN({})); // false
登录后复制

其他判断是否 NaN 的方法

function isNaNVal(val) {  return Object.is(val, NaN);}function isNaNVal(val) {  return val !== val;}function isNaNVal(val) {  return typeof val === "number" && isNaN(val);}// 综合垫片if (!("isNaN" in Number)) {  Number.isNaN = function (val) {    return typeof val === "number" && isNaN(val);  };}
登录后复制
indexOf 和 includesindexOf 不可查找 NaNincludes 则可以
const arr = [NaN];console.log(arr.indexOf(NaN)); // -1console.log(arr.includes(NaN)); // true
登录后复制

【推荐学习:javascript高级教程】

以上就是JavaScript怎么判断数据类型?8 种方式分享的详细内容,更多请关注易企推科技其它相关文章!


本文地址:网络百科频道 https://www.eeeoo.cn/wangluo/1147678.html,嗨游网一个专业手游免费下载攻略知识分享平台,本站部分内容来自网络分享,不对内容负责,如有涉及到您的权益,请联系我们删除,谢谢!


网络百科
小编:小嗨整编
相关文章相关阅读
  • 荔枝app录音怎么导出音频(荔枝app的音频怎么转成mp3格式)?

    荔枝app录音怎么导出音频(荔枝app的音频怎么转成mp3格式)?

    荔枝app录音怎么导出音频(荔枝app的音频怎么转成mp3格式)?荔枝app作为一款流行的音频录制与分享平台,让许多用户可以在其中录制属于自己的声音。但有时候,我们可能需要将荔枝app中的录音导出为MP3格式,以便在其他设备上播放。本文将为...

  • 华为应用商店app官网(华为应用商店app怎么下载)?

    华为应用商店app官网(华为应用商店app怎么下载)?

    华为应用商店app官网(华为应用商店app怎么下载)?华为应用商店App作为华为手机用户的首选应用下载平台,提供了丰富的应用程序、游戏资源,同时也保证了应用的安全性和稳定性。那么,如何从官网下载华为应用商店App呢?本文将为您详细介绍。一、...

  • 淘宝app怎么打开(淘宝app在哪里找)?

    淘宝app怎么打开(淘宝app在哪里找)?

    淘宝app怎么打开(淘宝app在哪里找)?在现代生活中,淘宝App已经成为我们购物的重要工具之一。那么,淘宝App到底怎么打开?又该如何找到并下载它呢?本文将为您详细解答。一、淘宝App的下载方法1.通过手机应用商店下载对于安卓用户:打开手...

  • 魔兽世界泰兰德是什么职业(魔兽世界泰兰德幻化怎么获得)?

    魔兽世界泰兰德是什么职业(魔兽世界泰兰德幻化怎么获得)?

    魔兽世界泰兰德是什么职业(魔兽世界泰兰德幻化怎么获得)?在魔兽世界中,泰兰德是魔兽世界中暗夜精灵种族的代表性角色,她以牧师职业为主。牧师在游戏中拥有强大的治疗和辅助能力,是团队中不可或缺的重要角色。泰兰德作为一名牧师,擅长使用圣光和暗影之力...

  • 魔兽世界恶魔术士天赋加点(魔兽世界恶魔术士属性怎么堆)?

    魔兽世界恶魔术士天赋加点(魔兽世界恶魔术士属性怎么堆)?

    魔兽世界恶魔术士天赋加点(魔兽世界恶魔术士属性怎么堆)?在魔兽世界中,恶魔术士是一个以高爆发和持续伤害著称的职业。合理的天赋加点对于恶魔术士的输出至关重要。本文将为您详细介绍恶魔术士的天赋加点方法,以及如何高效堆叠属性。魔兽世界恶魔术士天赋...

  • lol道聚城怎么赠送皮肤(lol道聚城优惠券领取)?

    lol道聚城怎么赠送皮肤(lol道聚城优惠券领取)?

    lol道聚城怎么赠送皮肤(lol道聚城优惠券领取)?lol道聚城作为英雄联盟的官方周边商城,提供了丰富的游戏周边产品和优惠活动。在道聚城中,赠送皮肤成为了许多玩家表达友谊与支持的方式。下面将为您详细介绍如何在lol道聚城赠送皮肤,以及如何领...

  • lol小丑的名字叫什么(lol小丑怎么分辨真假)?

    lol小丑的名字叫什么(lol小丑怎么分辨真假)?

    lol小丑的名字叫什么(lol小丑怎么分辨真假)?在lol英雄联盟中,小丑(Janna)作为一位辅助英雄,以其独特的技能和出色的辅助能力深受玩家喜爱。然而,许多玩家在游戏中可能遇到真假小丑难以辨别的问题。本文将为大家详细解析LOL小丑的名字...

  • dnf格斗大赛黄金套外观(dnf格斗大赛装扮兑换券怎么获得)?

    dnf格斗大赛黄金套外观(dnf格斗大赛装扮兑换券怎么获得)?

    dnf格斗大赛黄金套外观(dnf格斗大赛装扮兑换券怎么获得)?在dnf中,格斗大赛黄金套一直是玩家们梦寐以求的稀有装扮。这套装扮不仅外观炫酷,而且属性强大,深受玩家们的喜爱。那么,黄金套的外观究竟如何,我们又该如何获得兑换券呢?本文将为您一...

  • 周排行
  • 月排行
  • 年排行

精彩推荐