在javaScript中检测数据类型的几种方式小结

接下来我将详细讲解在JavaScript中检测数据类型的几种方式小结。

检测数据类型的几种方式

typeof

typeof 操作符可以返回值的数据类型字符串。它只有一些简单的规则,可以处理大多数数据类型,但也存在一些特殊情况。如下所示:

typeof 123; // "number"
typeof "123"; // "string"
typeof true; // "boolean"
typeof undefined; // "undefined"
typeof null; // "object"
typeof {}; // "object"
typeof []; // "object"
typeof function() {}; // "function"

var fn = function() {}; // "typeof" 返回字符串是 "function"
typeof fn; // "function"

typeof NaN; // "number"
typeof Infinity; // "number"

Object.prototype.toString.call()

Object.prototype.toString.call() 方法用于精确地检测对象数据类型。它将返回一个以 [object 类型] 格式表示的字符串。如下所示:

Object.prototype.toString.call(123); // "[object Number]"
Object.prototype.toString.call("123"); // "[object String]"
Object.prototype.toString.call(true); // "[object Boolean]"
Object.prototype.toString.call(undefined); // "[object Undefined]"
Object.prototype.toString.call(null); // "[object Null]"
Object.prototype.toString.call({}); // "[object Object]"
Object.prototype.toString.call([]); // "[object Array]"
Object.prototype.toString.call(function () {}); // "[object Function]"
Object.prototype.toString.call(new Date()); // "[object Date]"
Object.prototype.toString.call(/test/gi); // "[object RegExp]"

instanceof

instanceof 运算符可以检测一个对象是否是另外一个对象的实例。如下所示:

123 instanceof Number; // false
"123" instanceof String; // false
true instanceof Boolean; // false
undefined instanceof Object; // false
({}) instanceof Object; // true
[] instanceof Array; // true
function() {} instanceof Function; // true

注意:123"123"trueundefined 不是对象,不能作为 instanceof 运算符的左操作数。如果使用它们,将会抛出一个 ReferenceError 异常。

总结

在以上的三种方式中, typeof 在检测大多数类型时起到了良好的作用,但是在检测 nullArray 时会出现问题。而 Object.prototype.toString.call() 是最为常用的方式,它可以精确地检测所有类型。 instanceof 运算符则主要用于检测一个对象是否是某个类的实例。

示例

function getType(value) {
  return Object.prototype.toString.call(value).slice(8, -1);
}

getType(123); // "Number"
getType("123"); // "String"
getType(true); // "Boolean"
getType(undefined); // "Undefined"
getType(null); // "Null"
getType({}); // "Object"
getType([]); // "Array"
getType(function() {}); // "Function"
function isClass(obj, cls) {
  while (obj && obj.__proto__) {
    if (obj.__proto__ === cls.prototype) {
      return true;
    }
    obj = obj.__proto__;
  }
  return false;
}

isClass(new Number(123), Number); // true
isClass(new String("123"), String); // true
isClass(new Boolean(true), Boolean); // true
isClass(new Object(), Object); // true
isClass([], Array); // true
isClass({}, Object); // true
isClass(function() {}, Function); // true

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:在javaScript中检测数据类型的几种方式小结 - Python技术站

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

相关文章

  • 纯JS实现根据CSS的class选择DOM

    实现根据CSS的class选择DOM,可以使用document.getElementsByClassName()方法来完成。这个方法会返回所有符合指定class name的元素的一个类数组对象。但是需要注意的是,该方法在低版本的IE浏览器中不支持,所以最好搭配使用checkBrowser()函数,来进行浏览器兼容性的处理。 以下是完成该功能的具体步骤: 步骤…

    JavaScript 2023年6月10日
    00
  • 解决layui的table.checkStatus失效问题

    当我们使用layui的table组件进行表格渲染时,可能会遇到table.checkStatus()失效的问题。这个问题通常出现在表格内容为动态加载,并且通过ajax请求获取的情况下。下面就针对这个问题,提供一些解决方法。 解决方法一:事件代理 事件代理是在父级元素上监听子级元素的事件,然后在子级元素被点击时进行处理。在这个问题中,我们可以通过在table的…

    JavaScript 2023年5月27日
    00
  • JavaScript求一组数的最小公倍数和最大公约数常用算法详解【面向对象,回归迭代和循环】

    下面是JavaScript求一组数的最小公倍数和最大公约数常用算法的详解。 什么是最小公倍数和最大公约数 在数学中,对于给定的两个或多个整数,最小公倍数是可以被其中的每一个整数整除的最小正整数,最大公约数是可以被两个或多个整数整除的最大正整数。最小公倍数和最大公约数常常用于解决各种数学问题,如分数的化简、幂的约分等等。 算法介绍 最大公约数的求解方法 在求两…

    JavaScript 2023年5月28日
    00
  • JS中this的4种绑定规则详解

    下面是对于“JS中this的4种绑定规则详解”的完整攻略: 1. 默认绑定规则 默认绑定规则是指,在函数调用时,若函数调用时调用点没有指定调用的对象,this会绑定在全局对象上,即window(在浏览器环境下)。 示例代码如下: function foo() { console.log(this.a); } var a = 2; foo(); // 输出2 …

    JavaScript 2023年6月10日
    00
  • 脚本收藏iframe

    下面是“脚本收藏iframe”的完整攻略: 1. 什么是脚本收藏iframe 脚本收藏iframe即是通过一个特定的网站,将一些常用或比较重要的javascript脚本进行收藏和管理,并用一个iframe嵌入到自己的网页中,以便后续调用,从而达到提高网页开发效率的目的。 2. 开始使用脚本收藏iframe 要使用脚本收藏iframe,我们需要遵循以下步骤: …

    JavaScript 2023年6月11日
    00
  • JavaScript setTimeout和setInterval的使用方法 说明

    JavaScript setTimeout和setInterval的使用方法 说明 在 JavaScript 中,setTimeout 和 setInterval 都是一种定时器,可以让我们在指定的时间间隔或指定的时间后执行指定的函数。 setTimeout setTimeout 函数会在指定的时间后执行一次指定的函数。 语法 setTimeout(func…

    JavaScript 2023年6月11日
    00
  • js前端面试之同步与异步问题详解

    JS前端面试之同步与异步问题详解攻略 1. 同步与异步的概念 同步和异步都是指程序的执行方式,它们的区别在于程序执行完成的时间点不同。同步是指代码按照顺序一行一行地执行,需要等待前面的代码执行完成后才会执行后面的代码。而异步则是指代码不需要按照顺序执行,可以在后台继续执行其他代码,当前面的代码执行完成后再回来执行后面的代码。 2. 同步与异步的应用场景 同步…

    JavaScript 2023年5月28日
    00
  • 在JavaScript中操作时间之getUTCDate()方法的使用

    当我们在JavaScript中需要操作时间时,getUTCDate()是一个非常实用的方法,它可以获取当前时间基于协调世界时(UTC)的日期中的天数,即1到31之间的整数值。 方法语法 getUTCDate()方法的语法如下: dateObject.getUTCDate() 其中,dateObject表示需要获取日期的Date对象。 方法返回值 getUTC…

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