利用JS判断数据类型的四种方法

当我们使用JavaScript编写程序时,经常会遇到数据类型的问题,因此判断数据类型变得非常重要。现在我们将介绍四种方法来判断数据的类型。

一、使用typeof关键字

使用 typeof 关键字可以判断 JavaScript 的数据类型。

  • typeof 在判断数值、字符串、布尔、undefined、symbol 类型的时候都能准确判断。
  • 但是当判断 null 和 object 时,会给出 object。

下面是一个将类型和值都输出的示例:

function checkType(value) {
  console.log(typeof value, value)
}

checkType(123) // number 123
checkType('abc') // string 'abc'
checkType(true) // boolean true
checkType(undefined) // undefined undefined
checkType(null) // object null
checkType({name: 'bob'}) // object {name: 'bob'}
checkType([1, 2, 3]) // object [1, 2, 3]
checkType(function() {}) // function () {}

二、使用instanceof关键字

instanceof 用来判断某个对象是否为某个类的实例,使用方法相对比较简单。

以下是一个判断数组类型的例子:

let arr = [1, 2, 3];
arr instanceof Array; // true

我们可以封装一个函数来判断。

function isArray (value) {
  return value instanceof Array;
}

console.log(isArray([1,2,3])); //true

三、使用Object原型上的toString方法

我们可以使用可以使用 Object 原型上的 toString() 方法来判断数据类型。

以下是一个判断对象类型的例子:

let obj = {};
Object.prototype.toString.call(obj); // [object Object]

以下是一些判断其他类型的示例:

console.log(Object.prototype.toString.call(null)) //[object Null]
console.log(Object.prototype.toString.call(undefined)) //[object Undefined]
console.log(Object.prototype.toString.call('abc')) //[object String]
console.log(Object.prototype.toString.call(123)) //[object Number]
console.log(Object.prototype.toString.call(true)) //[object Boolean]
console.log(Object.prototype.toString.call(Symbol())) //[object Symbol]
console.log(Object.prototype.toString.call(function(){})) //[object Function]

console.log(Object.prototype.toString.call([])) //[object Array]
console.log(Object.prototype.toString.call(new Date())) //[object Date]
console.log(Object.prototype.toString.call(/[a-z]/)) //[object RegExp]
console.log(Object.prototype.toString.call(new Error())) //[object Error]
console.log(Object.prototype.toString.call(Math)) //[object Math]

我们已经知道如何定义一个判断数组类型的函数 isArray,继续扩展一下,定义一些其它类型的判断方法。

function isType (type) {
  return function (value) {
    return Object.prototype.toString.call(value) === `[object ${type}]`;
  };
}

const isArray = isType('Array');
const isObject = isType('Object');
const isRegExp = isType('RegExp');
const isError = isType('Error');
const isMath = isType('Math');

console.log(isArray([])); //true
console.log(isObject({})); //true
console.log(isNaN(new Date())); //false
console.log(isRegExp(/[a-z]/)); //true

四、使用ES6中的Symbol.hasInstance属性

我们也可以使用ES6中的Symbol.hasInstance属性来判断数据类型。

在实例化一个对象时,其 Symbol.hasInstance 的属性会自动调用(类似于 toString() 方法)。如果实例对象的 Symbol.hasInstance 属性在构造函数的原型中,则为 true,否则为 false

以下是一个判断数组类型的例子:

class myArray {
  static [Symbol.hasInstance](instance) {
    return Array.isArray(instance);
  }
}

let arr = [1, 2, 3];
console.log(arr instanceof myArray); // true

通过定义 myArraySymbol.hasInstance 属性,我们可以将 myArray 及其实例添加到数组类型中,从而使 arr instanceof myArray 的结果为 true

总结

本文介绍了四种方法来判断 JavaScript 的数据类型,包括 typeof 关键字、instanceof 关键字、Object 原型上的 toString() 方法以及 ES6 中的 Symbol.hasInstance 属性。这些方法都有其特定的用途,可以灵活使用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:利用JS判断数据类型的四种方法 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 带你搞懂js的深拷贝

    带你搞懂js的深拷贝 在JavaScript中,拷贝是一项非常重要的任务,因为在JavaScript中,赋值操作并不是简单的复制一个变量的值到另一个变量,而是复制该变量所持有的引用地址,这意味着如果你直接将一个变量赋值给另一个变量,那么两者将共享同一份数据,即数据的修改将会同步。因此,当你需要对数据进行操作和修改时,深拷贝是至关重要的。 深拷贝的实现 实现一…

    JavaScript 2023年5月27日
    00
  • jquery实现表单验证简单实例演示

    下面是关于”jquery实现表单验证简单实例演示”的完整攻略。 什么是jquery表单验证 jquery是一个Javascript库,可以简化JavaScript编写等操作具体内容往往使用jQuery编写的,它可以使JavaScript的大量编码变得轻松愉快。jquery表单验证就是使用jquery库来实现对表单的验证功能,包括对用户输入的内容进行格式、合法…

    JavaScript 2023年6月10日
    00
  • 关于js datetime的那点事

    关于JS DateTime的那点事 Javascript中的日期和时间对象是非常常用的,特别是在前端web开发中。在这篇攻略中,我们会详细讲解JS DateTime相关的概念以及如何在JS中处理日期和时间。 JS中的日期和时间对象 在JS中,日期和时间对象可以通过 Date() 构造函数来创建。以下是几种常见的创建日期对象的方法。 创建一个新日期对象 con…

    JavaScript 2023年5月27日
    00
  • JS基于FileSaver.js插件实现文件保存功能示例 原创

    c1 简介 本文介绍了如何使用FileSaver.js插件实现Javascript文件保存功能。 FileSaver.js是一个Javascript库,提供了将文件保存到本地的功能。该库主要用于浏览器端,支持多种类型的文件格式,包括文本、CSV、PDF、Image等等。 c2 安装 要使用FileSaver.js插件,需要先将其引入到HTML页面中。可以通过…

    JavaScript 2023年5月27日
    00
  • JavaScript 页面编码与浏览器类型判断代码

    让我来详细讲解一下”JavaScript页面编码与浏览器类型判断代码”的完整攻略。 页面编码 在网页开发中,为了确保浏览器能正确地解读和显示我们写出的HTML和CSS代码,我们需要在网页中指定一种字符编码方式。常见的字符编码方式包括UTF-8, GB2312, GBK等。 我们可以通过在网页中加入如下的meta标签来指定网页使用的编码方式。 <meta…

    JavaScript 2023年5月20日
    00
  • JavaScript 引用类型之原始值包装类型String

    JavaScript 引用类型之原始值包装类型String,是针对字符串类型的一种特殊的对象类型。在使用字符串时,我们通常会用到String对象,包括字符串的一些常见操作和属性。 创建String对象 我们可以使用字符串字面量或String()构造函数来创建一个字符串对象。下面是两个创建字符串对象的示例: let str1 = "hello wor…

    JavaScript 2023年5月19日
    00
  • js实现登陆与注册功能

    实现登录和注册功能是实现网站用户系统非常重要的一部分。下面是一个基本的js实现登陆与注册的攻略: 1.设计数据库 数据库是用来保存用户信息和验证用户身份的主要存储介质,需要提前设计好数据库的结构并使用相关的数据库技术(如MySQL)进行实现,至少包含用户信息表和用户登录信息表。常见的用户信息表包含加密后的用户名、加密后的密码、用户邮箱、注册时间等字段,示例:…

    JavaScript 2023年5月19日
    00
  • js实现接收表单的值并将值拼在表单action后面的方法

    实现接收表单的值并将值拼在表单action后面的方法,可以通过以下步骤来完成: 使用 HTML 表单标签创建表单,并指定表单的 action 和 method 属性以及 input 标签来定义表单项。 <form action="submit.php" method="post"> <label fo…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部