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

yizhihongxing

当我们使用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中prototype的用法实例分析

    接下来我将为你详细介绍“JS中prototype的用法实例分析”的完整攻略。 什么是Prototype JS中的每一个对象都有一个Prototype链,它指向了另一个对象,这个对象叫做“原型”,这样就可以实现某些属性和方法的继承。 当我们需要给一个JS对象添加属性或方法时,可以通过prototype来实现。在使用prototype属性时,我们需要明确两点: …

    JavaScript 2023年6月11日
    00
  • layui自定义验证,用ajax查询后台是否有重复数据,form.verify的例子

    下面是关于 layui 自定义验证,用 AJAX 查询后台是否有重复数据,form.verify 的例子的完整攻略。 1. 准备工作 在制作这个例子之前,我们需要先安装好 layui,以及后端接口,这里使用 Node.js + Express 作为示例,同时需要使用到 MySQL 数据库,这里使用到了 sequelize 库进行数据库的连接和操作。 安装完所…

    JavaScript 2023年6月10日
    00
  • javascript 函数限制调用代码

    当我们编写 JavaScript 代码时,为了代码安全和可维护性,限制函数外部对函数内部代码的访问是十分重要的。在以下代码片段中,函数内部的数据变量可以被外部直接访问和修改,这会导致安全漏洞和代码不易维护。 let data = { name: ‘John’, age: 35 } function fetchData() { return data; } c…

    JavaScript 2023年5月27日
    00
  • javascript克隆对象深度介绍

    JavaScript克隆对象深度介绍 在 JavaScript 中,进行对象的克隆操作是非常常见的需求,而对象克隆的深度也是我们需要考虑的一个问题。本篇攻略将会详细介绍 JavaScript 中对象克隆的深度问题。 什么是 JavaScript 对象克隆 JavaScript 中的对象克隆(Object Clone),即用一个新变量复制出一份与原变量内容完全…

    JavaScript 2023年5月27日
    00
  • javascript中拼接HTML字符串的最快、最好的方法

    拼接HTML字符串是在javascript中开发中的一个常见需求。为了避免使用字符串拼接来构造HTML代码时产生的代码难以维护、不易阅读的问题,我们可以使用其他更好的方法来拼接HTML字符串,这是一个更快、更好的方法。 本文将介绍如何通过使用JavaScript来拼接HTML字符串,并给出两个例子,以详细解释每个步骤。 基于字符串模板的拼接 第一个方法是基于…

    JavaScript 2023年5月19日
    00
  • DOM基础教程之使用DOM控制表格

    下面我将详细讲解“DOM基础教程之使用DOM控制表格”的完整攻略。 使用DOM控制表格 使用JavaScript操作DOM可以很方便地控制网页中的各种元素,其中涉及到操作表格的内容、样式等。本教程将介绍如何使用DOM控制表格。 获取表格元素 在使用JavaScript控制表格之前,首先需要获取表格元素。可以使用document.getElementById函…

    JavaScript 2023年6月10日
    00
  • 一个JavaScript递归实现反转数组字符串的实例

    JavaScript递归实现反转数组字符串的实例 本攻略将提供如何使用JavaScript递归方法来反转字符串数组的详细步骤。反转字符串数组实现过程如下: 创建一个新函数 reverseArr 来实现反转字符串数组。 在 reverseArr 函数内, 检查当前数组中的第一个和最后一个元素,并交换它们的位置,以此反转数组。 接下来,使用递归将 reverse…

    JavaScript 2023年5月27日
    00
  • elementUI动态嵌套el-form表单校验举例详解

    ElementUI 动态嵌套 el-form 表单校验举例详解 简介 在 ElementUI 中,el-form 是常用的表单组件,用于进行数据录入和数据校验。但是,当表单复杂度较高,需要动态增加或删除表单项时,我们需要使用动态嵌套来实现。本篇文章将详细讲解 ElementUI 动态嵌套 el-form 表单校验的实现方法,包括基础使用方法、动态增加表单项、…

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