利用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日

相关文章

  • 学习使用bootstrap基本控件(table、form、button)

    学习使用Bootstrap基本控件(table、form、button)是开发Web应用程序的基础内容。本文将介绍如何使用Bootstrap创建表格、表单和按钮,并提供示例说明。 使用Bootstrap创建表格 Bootstrap提供了强大的表格样式和组件,可以轻松地创建美观的表格。下面是如何使用Bootstrap创建表格的步骤: 导入Bootstrap C…

    JavaScript 2023年6月10日
    00
  • JavaScript 开发规范要求(图文并茂)

    JavaScript开发规范要求(图文并茂) 简介 JavaScript是一门非常灵活的语言,灵活性也为其带来了使用难度,所以为了保证代码的品质和可维护性,一些好的JavaScript开发规范是必不可少的。 为此,本文将详细介绍旨在提高JavaScript代码品质和可维护性的开发规范要求。 代码组织 引入顺序 首先,我们应该根据引入类型将脚本分成3个部分: …

    JavaScript 2023年5月27日
    00
  • 一篇文章搞懂JavaScript正则表达式之方法

    下面是“一篇文章搞懂JavaScript正则表达式之方法”的完整攻略: 什么是正则表达式 正则表达式(Regular Expression,regex,RegExp)是一种用来进行字符串匹配的工具。它通过一些特定字符的组合和描述规则来匹配文本中的字符序列。JavaScript 中使用正则表达式同样非常方便。 创建正则表达式 在 JavaScript 中,有两…

    JavaScript 2023年6月10日
    00
  • javascript去掉代码里面的注释

    下面是“JavaScript去掉代码里面的注释”的完整攻略: 步骤一:复制代码 首先,需要将所要去除注释的JavaScript代码复制到一个新的文本文件中。可以使用文本编辑器完成该步骤。 步骤二:使用正则表达式去除注释 在新的文本文件中,我们可以使用正则表达式(Regular Expression)去除代码里面的注释。以下是基于正则表达式的两个示例: 示例一…

    JavaScript 2023年6月11日
    00
  • JavaScript高阶API数组reduce函数使用示例

    我们来详细讲解一下”JavaScript高阶API数组reduce函数使用示例”。 什么是reduce()函数? reduce()是JavaScript的高阶函数之一,可以将一个数组中的所有元素通过回调函数累加为一个值。该函数接受两个参数: 回调函数 初始值 回调函数用于对数组中的每个元素进行处理,并返回处理结果。第一次调用回调函数时,第一个参数为初始值,第…

    JavaScript 2023年5月27日
    00
  • 5个JavaScript经典面试题

    以下是对于“5个JavaScript经典面试题”的完整攻略: 1. 说一下对JS变量提升的理解 JavaScript 的变量和函数声明都会被提升到代码开头,这种行为被人们称为变量提升(hoisting)。在代码执行前,JavaScript 引擎会处理所有的函数和变量的声明。变量的值会被设置为 undefined,而函数的代码也会被提前进行编译。 下面是一个示…

    JavaScript 2023年5月28日
    00
  • 微信小程序学习笔记之文件上传、下载操作图文详解

    微信小程序学习笔记之文件上传、下载操作图文详解 本文主要介绍了在微信小程序中进行文件上传和下载的操作,包括上传和下载的基本流程、代码实现的步骤以及示例演示等。 文件上传基本流程 文件上传的基本流程包括: 创建文件上传组件和触发上传事件。 选择要上传的文件。 获取上传文件的tempFilePath。 发送上传请求。 处理上传成功或上传失败的结果。 文件上传代码…

    JavaScript 2023年5月19日
    00
  • Javascript将JSON日期格式化

    针对Javascript如何将JSON日期格式化的问题,我会提供一个完整的攻略。该攻略包含以下步骤: 获取JSON日期数据并转化为Date对象 设置日期格式,包括年、月、日、时、分、秒等 根据设置的格式,使用JavaScript内置方法对日期进行格式化 下面,我将详细阐述每一步,并提供两条示例说明来帮助更好地理解。 1. 获取JSON日期数据并转化为Date…

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