iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >JavaScript之类型检测的案例
  • 487
分享到

JavaScript之类型检测的案例

2023-06-07 23:06:35 487人浏览 独家记忆
摘要

这篇文章主要介绍了javascript之类型检测的案例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、typeoftypeof:操作符返回一个字符串,表示未经计算的操作数的

这篇文章主要介绍了javascript之类型检测的案例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

一、typeof

typeof:操作符返回一个字符串,表示未经计算的操作数的类型。

我们都知道,在 es6 前,JavaScript 共六种数据类型,分别是:

  1. Undefined

  2. Null

  3. Boolean

  4. Number

  5. String

  6. Object

然而当我们使用 typeof 对这些数据类型的值进行操作的时候,返回的结果却不是一一对应,分别是:

  1. Undefined

  2. object – ***

  3. Boolean

  4. Number

  5. String

  6. Object

有一些意外,typeof null => 'object'typeof function(){} => 'function'

所以在大多数情况下我们可以使用typeof来检测基本数据类型,但是,检测得到的Object后,却无法区分是哪一种Object:

typeof [] === 'object'; //truetypeof {} === 'object'; //truetypeof null === 'object'; //true

总结

在检测js的原始类型时,除了typeof null返回object之外,其他的都返回对应类型名的小写字母。

二、instanceof

我们判断对象类型的时候,可以使用instanceof:

如果对原型及原型链不太熟悉的同学不妨看看这篇文章从原型到原型链

定义

instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。

实例

const arr = [];const obj = {};console.log(arr instanceof Array);   // trueconsole.log(arr instanceof Object);  // trueconsole.log(obj instanceof Array);   // falseconsole.log(obj instanceof Object);  // true

注意instanceof是能匹配类型的父类的,所以arr instanceof Array和arr instanceof Object都是true,因为Object是Array的父类。

满足class extends原型链规则的父子类关系的对象都能被匹配:

class

class Base {}class Current extends Base {}const obj = new Current();console.log(obj instanceof Current); // trueconsole.log(obj instanceof Base); // true

原型链

function Foo() {}function Bar() {}Bar.prototype = new Foo();const obj = new Bar();console.log(obj instanceof Bar); // trueconsole.log(obj instanceof Foo); // true

注意如果我们修改obj的原型链能改变instanceof的结果:

function Other() {}obj.__proto__ = new Other();console.log(obj instanceof Other); // trueconsole.log(obj instanceof Foo); // false

总结

instanceof借助了原型链来判断的实际上,只要一个类型Type的prototype在一个对象obj的原型链上,那么obj instanceof Type就是true,否则就是false。

三、constructor

有时候我们不希望匹配父类型,只希望匹配当前类型,那么我们可以用constructor来判断:

如果对原型及原型链不太熟悉的同学不妨看看这篇文章从原型到原型链

定义

返回创建实例对象的 Object 构造函数的引用。注意,此属性的值是对函数本身的引用,而不是一个包含函数名称的字符串

实例

const arr = [];console.log(arr.constructor === Array); // trueconsole.log(arr.constructor === Object); // false

对象的constructor会返回它的类型,而类型在定义的时候,会创建一个name只读属性,值为类型的名字。

class Foo {}console.log(Foo.name); // Fooconst foo = new Foo();console.log(foo.constructor === Foo); // trueconsole.log(foo.constructor.name === 'Foo'); // true

疑问

  • constructor.name 一定就是正确的吗?

  • 我们可以修改它吗?

四、stringTag是什么?

4.1 stringTag——类型标签

如果你看过一些库的早期实现,你会发现使用Object.prototype.toString来做类型判断的方式,他们会数据类型的字符串标志,被称作stringTag

4.2 Object.prototype.toString

定义

toString()方法返回一个表示该对象的字符串。

每个对象都有一个 toString() 方法,当该对象被表示为一个文本值时,默认情况下,toString() 方法被每个 Object 对象继承。

如果此方法在自定义对象中未被覆盖,toString() 返回 “[object type]”,其中 type 是对象的类型。以下代码说明了这一点:

实例

比如这是requirejs里面的代码片段。

var ostring = Object.prototype.toString;function isArray(it) {  return ostring.call(it) === '[object Array]';}

toString时都做了什么?

这里直接将冴羽大大的总结搬了过来:

When the toString method is called, the following steps are taken:

  1. If the this value is undefined, return “[object Undefined]”.

  2. If the this value is null, return “[object Null]”.

  3. Let O be the result of calling ToObject passing the this value as the argument.

  4. Let class be the value of the [[Class]] internal property of O.

  5. Return the String value that is the result of concatenating the three Strings "[object ", class, and “]”.

当 toString 方法被调用的时候,下面的步骤会被执行:

  1. 如果 this 值是 undefined,就返回 [object Undefined]

  2. 如果 this 的值是 null,就返回 [object Null]

  3. 让 O 成为 ToObject(this) 的结果

  4. 让 class 成为 O 的内部属性 [[Class]] 的值

  5. 最后返回由 "[object " 和 class 和 “]” 三个部分组成的字符串

注意

有几点我们需要注意:

  • toString无法区分原始类型及其构造对象;

    • 我们认为Number、Boolean这种类型在被构造器构造出来后的类型应该是对象

    • 但toString都会返回[object number]等原始类型;

  • toString方法是可以自定义的;

五、实现几个数据检测的方法

好了看了几款常用的类型判断方法后,我们可不可以实现自己的类型判断工具?就利用上述提到的一个或多个方法。我们自己动手丰衣足食~

5.1 isObject

注意,我们认为null不是一个对象,它就是null~

function isObject(value) {    const type = typeof value;    return value != null && (type === 'object' || type === 'function');}
5.2 isNull
function isNull(value) {    return value === null;}
5.3 isFunction
function isFunction(value) {    return typeof value === 'function';}
5.4 isArray
var isArray = Array.isArray || function( value ) {    return type(value) === "array";}
5.5 stringTag
const toString = Object.prototype.toString;function getTag(value) {    // if (value === null) return '[object Null]';    // if (value == null) return '[object Undefined]'    if (value == null) {        return value === undefined ? '[object Undefined]' : '[object Null]'    }    return toString.call(value)}

感谢你能够认真阅读完这篇文章,希望小编分享的“JavaScript之类型检测的案例”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网精选频道,更多相关知识等着你来学习!

--结束END--

本文标题: JavaScript之类型检测的案例

本文链接: https://www.lsjlt.com/news/250438.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JavaScript之类型检测的案例
    这篇文章主要介绍了JavaScript之类型检测的案例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、typeoftypeof:操作符返回一个字符串,表示未经计算的操作数的...
    99+
    2023-06-07
  • JavaScript类型检测的方法实例教程
    前言 JavaScript是web前端广泛应用的语言之一,在网页应用制作、脚本制作、小程序等诸多领域具有不可替代的的地位。笔者学习了一端时间的前端,颇感JS知识点的繁碎,故将学习到...
    99+
    2024-04-02
  • JavaScript怎么检测文件的类型
    这篇文章主要介绍JavaScript怎么检测文件的类型,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在日常工作中,文件上传是一个很常见的功能。在某些情况下,我们希望能限制文件上传的类型,比如限制只能上传 PNG 格式...
    99+
    2023-06-15
  • JavaScript 检测文件的类型的方法
    目录一、如何查看图片的二进制数据二、如何区分图片的类型三、如何检测图片的类型3.1 定义 readBuffer 函数3.2 定义 check 函数3.3 检测 PNG 图片类型我们会...
    99+
    2024-04-02
  • JavaScript中怎么检测数据类型
    本篇内容介绍了“JavaScript中怎么检测数据类型”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!检测数据类型1:typeof其返回结果都...
    99+
    2023-07-06
  • 如何使用JavaScript 检测文件的类型
    这篇文章将为大家详细讲解有关如何使用JavaScript 检测文件的类型,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、如何查看图片的二进制数据要查看图片对应的二进制数据,我们可以借助一些...
    99+
    2023-06-15
  • JavaScript中检测数据类型的四种方法
    目录1. typeof2. instanceof3. constructor(构造函数)4. Object.prototype.toString.call()前言:在介绍检测数据类型...
    99+
    2024-04-02
  • Java检测死锁案例
    导致死锁的程序 package com.study.train; import java.io.IOException; import java.lang.management...
    99+
    2024-04-02
  • JavaScript数据类型检测实现方法详解
    目录一、typeof二、instanceof三、Object.prototype.toString.call()面试问题一、typeof 优点:能快速判断基本数据类型,除了 Null...
    99+
    2022-11-13
    JavaScript数据类型检测 JS数据类型检测
  • JavaScript中检测数据类型的四种方法总结
    目录检测数据类型1:typeof检测数据类型2:instanceof检测数据类型3:constructor检测数据类型4:Object.prototype.toString.call...
    99+
    2023-05-16
    JavaScript检测数据类型方法 JavaScript检测数据类型 JavaScript数据类型
  • JavaScript数据类型检测功能如何实现
    本文小编为大家详细介绍“JavaScript数据类型检测功能如何实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“JavaScript数据类型检测功能如何实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、t...
    99+
    2023-07-04
  • Javascript基础之类型的示例分析
    这篇文章主要介绍了Javascript基础之类型的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。基本类型  Javascript有5...
    99+
    2024-04-02
  • JavaScript中引用类型之基本包装类型的示例分析
    这篇文章主要介绍JavaScript中引用类型之基本包装类型的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体如下:为了操作基本类型值,ECDMAScript提供了3个特殊...
    99+
    2024-04-02
  • JavaScript基础之数据类型的示例分析
    这篇文章主要为大家展示了“JavaScript基础之数据类型的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript基础之数据类型的示例分析...
    99+
    2024-04-02
  • JavaScript中检测数据类型的四种方法分别是什么
    这期内容当中小编将会给大家带来有关JavaScript中检测数据类型的四种方法分别是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。前言:在介绍检测数据类型的方法之前,先说说JavaScript中数据类...
    99+
    2023-06-26
  • js中各种数据类型检测和判定的实战示例
    目录介绍准备目标测试用例代码使用总结 介绍 在前端开发中,js 有各种各样的数据类型,数据类型检测是每个开发者都必须掌握基础知识。数据类型检测的方法也有很多种,本题将封装一...
    99+
    2022-11-13
    js数据类型检测和判定方法 js检测数据类型的方法 js检验数据类型
  • 实例测试MySQL的enum类型
    在开发项目时通常会遇到一些状态字段,例如订单的状态有 待支付、已支付、已关闭、已退款 等,我以前做的项目都是把这些状态用数字存在数据库中,然后在 php 代码中用常量来维护一份映射表,例如: const...
    99+
    2024-04-02
  • 渗透测试之CSRF代码漏洞的检测与加固方案
    XSS跨站以及CSRF攻击,在目前的渗透测试,以及网站漏洞检测中 ,经常的被爆出有高危漏洞,我们SINE安全公司在对客户网站进行渗透测试时,也常有的发现客户网站以及APP存在以上的漏洞,其实CSRF以及XSS跨站很容易被发现以及利用,在收集...
    99+
    2023-06-03
  • Java 处理超大数类型之BigInteger案例详解
    一、BigInteger介绍 如果在操作的时候一个整型数据已经超过了整数的最大类型长度 long 的话,则此数据就无法装入,所以,此时要使用 BigInteger 类进行操作。这些大...
    99+
    2024-04-02
  • php7新特性之标量类型声明的案例分析
    这篇文章主要介绍php7新特性之标量类型声明的案例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!PHP7增加了标量类型声明的特性,标量类型声明有两种模式   :强制模式(默认)严格模式   &...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作