js判断对象是否是某一类型

判断JavaScript对象是否是某一类型有多种方法,下面介绍几种主要的方法。

1. 使用typeof运算符

typeof 运算符可以判断值的类型,对基本类型具有很好的支持。不过对于一些引用类型,typeof 返回的结果并不准确。

const num = 1;
console.log(typeof num); // "number"

const str = "hello";
console.log(typeof str); // "string"

const bool = true;
console.log(typeof bool); // "boolean"

const arr = [1,2,3];
console.log(typeof arr); // "object"

const obj = { name: "Tom", age: 18 };
console.log(typeof obj); // "object"

const func = function() {};
console.log(typeof func); // "function"

可以看到 typeof 运算符的结果是一个字符串,它返回值的类型名称。 对于基本数据类型有较好的支持,不过对于数组、函数和对象这些引用类型,typeof 判断的结果都是 "object",这就显得不够准确。

2. 使用instanceof运算符

instanceof 运算符使用方法:对象 instanceof 类型

const num = new Number(1);
console.log(num instanceof Number); // true

const str = new String("hello");
console.log(str instanceof String); // true

const bool = new Boolean(true);
console.log(bool instanceof Boolean); // true

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

const obj = { name: "Tom", age: 18 };
console.log(obj instanceof Object); // true

function Person(name) {
  this.name = name;
}
const person = new Person("Mike");
console.log(person instanceof Person); // true

可以看到,instanceof 运算符可以准确地判断对象是否属于某一类型。但是如果检查一个对象是否属于 Object 类型,instanceof 运算符并不能给出正确的结果。

3. 使用toString()方法

const num = 1;
console.log(Object.prototype.toString.call(num)); // "[object Number]"

const str = "hello";
console.log(Object.prototype.toString.call(str)); // "[object String]"

const bool = true;
console.log(Object.prototype.toString.call(bool)); // "[object Boolean]"

const arr = [1,2,3];
console.log(Object.prototype.toString.call(arr)); // "[object Array]"

const obj = { name: "Tom", age: 18 };
console.log(Object.prototype.toString.call(obj)); // "[object Object]"

const func = function() {};
console.log(Object.prototype.toString.call(func)); // "[object Function]"

这种方式在各种对象类型的判断上都表现良好,但是麻烦的是需要借用 Object.prototype.toString() 方法来确定类型。

4. 使用ES6新特性,检查是否实现了Symbol.hasInstance方法

ES6 提供的 Symbol.hasInstance 方法可以判断一个对象是否是一个构造函数的实例。

一般写法:

class Person {}

const person = new Person();
console.log(person instanceof Person); // true

const num = 1;
console.log(num instanceof Number); // false
console.log(Number[Symbol.hasInstance](num)); // true

const str = "hello";
console.log(str instanceof String); // false
console.log(String[Symbol.hasInstance](str)); // true

const bool = true;
console.log(bool instanceof Boolean); // false
console.log(Boolean[Symbol.hasInstance](bool)); // true

const arr = [1,2,3];
console.log(arr instanceof Array); // true
console.log(Array[Symbol.hasInstance](arr)); // true

const obj = { name: "Tom", age: 18 };
console.log(obj instanceof Object); // true
console.log(Object[Symbol.hasInstance](obj)); // true

function Person2(name) {
  this.name = name;
}
Person2[Symbol.hasInstance] = function(obj) {
  if (obj instanceof Array) {
    return true;
  }
  return false;
}
const person2 = new Person2("Mike");
console.log(person2 instanceof Person2); // false
console.log(person2 instanceof Array); // true

可以看到,这种方式不仅支持原有的判断对象类型的方式,还支持用户自定义检查方式。

因此,从上面的介绍中,我们可以看到不同的方式都有其各自不同的优缺点,应根据实际情况选择合适的方法来判断对象是否是某一类型。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js判断对象是否是某一类型 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • js实现的日期操作类DateTime函数代码

    JS实现的日期操作类DateTime函数代码 什么是DateTime函数 DateTime函数是一种JS函数,用于实现日期的操作,包括日期增减、格式转换等操作。 DateTime函数的实现 以下代码实现了DateTime函数,具体实现了以下功能: 获取当前日期; 日期增减; 时间格式转换。 class DateTime { constructor(date)…

    JavaScript 2023年5月27日
    00
  • Java Web实现的基本MVC实例分析

    通过Java Web可以实现基本的MVC(Model-View-Controller)架构。MVC是一种软件设计模式,用于将一个应用程序分成三个核心部分:Model(模型)、View(视图)和Controller(控制器)。MVC架构使应用程序的开发、维护和扩展更加容易。本攻略将详细讲解在Java Web中实现基本MVC的过程,包括创建模型、视图和控制器、实…

    JavaScript 2023年5月28日
    00
  • JavaScript获取字符串实际长度(包含中英文)

    获取字符串实际长度是一个比较常见的问题,由于中英文字符在内存中占用的字节数不同,所以它们在字符串长度计算上也不同。在JavaScript中,我们可以使用以下方法获取一个字符串的实际长度。 方法一:通过正则匹配 正则表达式可以用来匹配所有非英文字符,我们可以使用它来判断字符串中是否包含中文字符。代码如下: function getLength(str) { r…

    JavaScript 2023年5月19日
    00
  • JavaScript 中for/of,for/in 的详细介绍

    当我们需要遍历一个对象或数组的时候,可以使用 JavaScript 中的 for/of 或 for/in 循环语句。但是它们的使用方式和适用范围有所不同,本文将带你详细介绍这两种循环的语法规则和使用场景。 for/of for/of 循环主要用于遍历可迭代对象(Iterable),例如数组、Map、Set 等。 for/of 循环语法: for (varia…

    JavaScript 2023年5月27日
    00
  • JavaScript基础知识之方法汇总结

    JavaScript基础知识之方法汇总 本文旨在总结 JavaScript 中常用的方法,包含了数据类型转换、运算符、条件语句、循环语句、函数等多个方面的内容,适用于初学者以及复习巩固。下面按照不同的分类分别介绍。 数据类型转换 JavaScript 中不同数据类型之间会发生类型转换,常见的有以下几种: 字符串转数字:使用 Number() 或 parseI…

    JavaScript 2023年5月17日
    00
  • javascript 事件处理、鼠标拖动效果实现方法详解

    JavaScript 事件处理、鼠标拖动效果实现方法详解 1. 什么是事件处理 在网页中,用户和网页之间的交互是通过事件来实现的。事件是页面中发生的某些特定的行为,例如点击链接、按下键盘按键、鼠标移动等。事件处理就是在事件发生时,执行相应的 JavaScript 代码。 2. 事件类型 常见的事件类型包括: 点击事件(click) 鼠标移动事件(mousem…

    JavaScript 2023年6月11日
    00
  • Javascript获取表单名称(name)的方法

    可以通过以下两种方法获取表单名称(name): 方法一:使用document.forms对象 可以通过document.forms对象来获取一个页面上的表单列表。这个对象有一个length属性,代表页面上所有表单的数量。而每个表单对象又有一个name属性,代表表单名称。 示例代码: // 获取第一个表单的名称 var formName = document.…

    JavaScript 2023年6月10日
    00
  • JS实现的定时器展示简单秒表、页面弹框及跳转操作完整示例

    JS实现的定时器展示简单秒表、页面弹框及跳转操作是一项很实用的功能。下面将详细讲解这项功能的攻略。 实现简单秒表 HTML代码 在HTML页面上添加一个按钮和展示秒数的div,如下所示: <button id="startBtn">开始计时</button> <div id="timeDisplay…

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