专业IT网络知识平台,分享IT百科知识、生活百科知识解答!

易企推科技
易企推科技

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.hkm168.com/jiqiao/1147678.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!


网络知识
小编:小易整编
相关文章相关阅读
  • 实用Word技巧分享:2招轻松解决多图片排版!

    实用Word技巧分享:2招轻松解决多图片排版!

    多图片排版,是Word编辑文档时常见场景之一,几乎每个人都会碰到,对很多人来说仍然是一大难题。当图片数量一多,很多人都不知道图片该怎么摆放,如何快速高效地搞定一组图片?因为没有掌握系统的套路技巧,每次制作都花费大量时间,做不出满意的效果。今...

  • ppt中怎么插入自定义动作按钮

    ppt中怎么插入自定义动作按钮

    ppt插入自定义动作按钮: 打开幻灯片文件,然后在菜单栏中点击插入,打开插入工具栏,之后在插入工具栏中选择形状工具,如下图所示:点击形状工具后,就打开所有预置的形状列表,如下图所示,选择我们需要的形状。选择好形状后,自动退回到ppt文件编辑...

  • 主板显卡卡扣断了怎么办

    主板显卡卡扣断了怎么办

    主板显卡卡扣断了可以尝试使用胶带或胶水将其固定、更换显卡插槽、更换主板或者寻求专业人员的帮助。详细介绍:1、使用胶带或胶水将其固定,使用胶带或胶水时要小心,以免粘到其他部件上;2、更换显卡插槽,建议找专业的电脑维修人员来进行操作;3、更换主...

  • abc类ip地址怎么区分

    abc类ip地址怎么区分

    区分方法:1、a类ip地址,第一段号码为网络号码,剩下的三段号码为本地计算机的号码;2、b类ip地址,前两段号码为网络号码;3、c类ip地址,前三段号码为网络号码,剩下的一段号码为本地计算机的号码。本教程操作环境:windows7系统、De...

  • jsp文件怎么创建

    jsp文件怎么创建

    创建jsp文件的步骤:1、安装和配置java开发环境;2、安装和配置web服务器;3、创建jsp文件;4、编写jsp代码;5、部署和运行应用程序;6、调试和测试。详细介绍:1、安装和配置java开发环境,首先需要在计算机上安装jdk,可以从...

  • win7升级错误代码80072efe该怎么办win7升级错误代码80072efe解决...

    win7升级错误代码80072efe该怎么办win7升级错误代码80072efe解决方案

    win7客户在系统更新的过程中遇到了80072efe的报错,像这种状况要怎么办呢?你先清查网络问题,然后去微软官网下载代理,假如你用的是32位计算机就免费下载32位代理,安装下载完成后马上重启。假如再次出现升级不正确得话,你也就再去官方网站...

  • git怎么合并分支代码

    git怎么合并分支代码

    git合并分支代码的方法:1、使用“gitmerge”命令,该命令用来做分支合并,可以将其他分支中的内容合并到当前分支中。2、使用“gitrebase”命令,该命令用于改变当前的分支的基点,进而实现分支合并。本教程操作环境:Window...

  • 什么是构造函数?详解JavaScript中的构造函数

    什么是构造函数?详解JavaScript中的构造函数

    作为原型和原型链的基础,先了解清楚构造函数以及它的执行过程才能更好地帮助我们学习原型和原型链的知识。本篇文章带大家详细了解一下javascript中的构造函数,介绍一下怎么利用构造函数创建一个js对象,希望对大家有所帮助!一个普通的函数被用...

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

精彩推荐