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

相关文章

  • javascript内置对象arguments详解

    当我们在JavaScript函数中调用时,它会内置一个名为arguments的对象,包含了函数所需要的所有参数。这个对象被称为函数的“参数数组”,它实际上只是一个数组样式的对象。 arguments对象的基本用法 因为arguments是一个对象,你可以使用点操作符来访问它的属性。下面是一些常用的arguments属性: arguments.length 此…

    JavaScript 2023年6月10日
    00
  • 现代 javscript 编程 资料

    现代 JavaScript 编程资料攻略 JavaScript 是一门非常流行的编程语言,它的应用广泛,包括 Web 前端开发、后端开发、移动端应用开发等。随着 JavaScript 的发展,现代 JavaScript 编程已经成为了一个新的概念,它包括了许多新的语言特性和工具,如 ES6、TypeScript、Vue、React 等。本文旨在为大家提供一个…

    JavaScript 2023年5月18日
    00
  • 前端面试必会网络跨域问题解决方法

    下面我将详细讲解前端面试必会网络跨域问题解决方法的完整攻略。 说明 在开发中,如果需要从当前页面向其它域名的页面发送请求,那么可能会出现跨域的问题。跨域问题是前端开发中比较常见的问题之一。本篇文章将从以下几个方面详细讲解如何解决跨域问题: 什么是跨域问题 跨域的解决方法 JSONP跨域 CORS跨域 什么是跨域问题 跨域问题是指浏览器的同源策略限制了向不同源…

    JavaScript 2023年6月11日
    00
  • Vue封装一个Tabbar组件 带组件路由跳转方式

    下面就来详细讲解如何用Vue封装一个Tabbar组件并带有组件路由的跳转方式。 一、准备工作 在开始编写代码之前,需要先安装Vue以及Vue Router等组件。具体步骤如下: 安装Vue.js npm install vue -S 安装Vue Router npm install vue-router -S 二、编写Tabbar组件 下面我们开始编写Tab…

    JavaScript 2023年6月11日
    00
  • 小程序tab页无法传递参数的方法

    小程序tab页无法传递参数是因为tab页在切换时不会重新加载,也就无法获取新的参数。解决这个问题的方法有多种,下面将提供两条示例说明。 方法1:使用全局变量传参 在小程序的app.js文件中定义一个全局变量globalData,用于存储需要传递的参数,然后在tab页的onLoad生命周期函数中获取这个参数即可。 代码示例: // app.js App({ g…

    JavaScript 2023年6月11日
    00
  • 深入了解JavaScript中正则表达式的使用

    深入了解JavaScript中正则表达式的使用 正则表达式是一种强大的文本模式匹配的方法,它在JavaScript中有着广泛的应用。本文将介绍正则表达式的基础知识,并包含两条示例说明。 正则表达式的基础知识 创建正则表达式 在JavaScript中,我们可以使用两种方式来创建正则表达式:字面量和RegExp对象。下面是两种方式的示例: // 字面量方式 le…

    JavaScript 2023年6月10日
    00
  • Javascript Date toTimeString() 方法

    以下是关于JavaScript Date对象的toTimeString()方法的完整攻略,包括两个示例说明。 JavaScript Date对象的toTimeString()方法 JavaScript的toTimeString()方法返回表示日期时间部分的字符串,该字符串格式为本地时间。该方法不接受任何参数。 下面是对象的toTimeString()方法的例…

    JavaScript 2023年5月11日
    00
  • extjs4图表绘制之折线图实现方法分析

    关于“extjs4图表绘制之折线图实现方法分析”的完整攻略,我将给你详细讲解。 1. 前言 折线图是常用的一种图表类型,它可以帮助我们展示数据的变化趋势和规律。而在extjs4中,我们也可以轻松地利用其中的图表组件来绘制折线图。下面是具体实现步骤。 2. 准备工作 在开始绘制折线图之前,我们需要做一些准备工作。 首先,我们需要导入extjs4中的chart.…

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