资讯专栏INFORMATION COLUMN

使用toString方法判断对象类型

xiangzhihong / 2972人阅读

摘要:操作符是最常见的类型判断方法,但其有局限性,只能判断基本数据类型,对于数组,日期等对象无法区分,统一显示为。配合,改变方法执行时的所在的环境,可以得到对象的精确类型。

typeof操作符是最常见的类型判断方法,但其有局限性,只能判断基本数据类型,对于数组,日期等对象无法区分,统一显示为object。

typeof []; //object
typeof new Date(); //object

使用toString()可以解决这个问题

toString基本用法

toString()是定义在Object.prototype上的实例方法,所有实例对象继承了该方法,其可以返回一个对象的字符串形式。

{}.toString(); // "[object Object]"
{a:1}.toString(); // "[object Object]"

对于空对象和一般对象,toString方法会继承于Object.prototype.toString,默认返回[object Object],其中第二个Object是该对象的构造函数,那么根据这个值可以判断数据类型。

"abc".toString(); // "abc"
[1,2].toString(); // "1,2"
new Date().toString(); // "Sun Mar 24 2019 16:08:58 GMT+0800"

然而很明显字符串、数组、Date等对象拥有自定义的toString方法,会覆盖Object.prototype.toString方法。

使用call()

可以直接使用Object.prototype.toString方法来获得类型,但由于是在Object对象环境中使用方法,所有对象都会显示[object Object]。
配合call(),改变toString方法执行时的所在的环境,可以得到对象的精确类型。

Object.prototype.toString.call("") // "[object String]"
Object.prototype.toString.call([]) // "[object Array]"
Object.prototype.toString.call(new Date()) // "[object Date]"
类型判断函数

返回的字符串中去掉前面object就是对象的类型,可以写一个比typeof更好的类型判断函数

function type(object){
  let s = Object.prototype.toString.call(object);
  return s.match(/[object (.*?)]/)[1].toLowerCase();
}
console.log(type(new Date())); // date

上面代码用正则表达式匹配得到类型,然后将类型字符串小写。
改进前面的程序,可以用遍历数据的方式得到判断某种特定的类型数据的方法。

function type(object){
  var s = Object.prototype.toString.call(object);
  return s.match(/[object (.*?)]/)[1].toLowerCase();
};
["Null","Undefined","Object","Array","String","Number","Boolean","Function","RegExp"
].forEach(function(t){
    type["is"+t] = function(object){
      return type(object) === t.toLowerCase();
    };
});
console.log(type.isArray([])); // true

参考
https://wangdoc.com/javascrip...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/102910.html

相关文章

  • 细数判断数据类型的各种方法

    摘要:可用于判断多种数据类型基本数据类型和内置对象,然而对于一些自定义构造函数生成的对象就不能进行判断了。判断是不是所有数据类型中,只有不等于它本身判断数组的方法除了上文提到的三种方法可判断外,还有一个构造函数自带的方法可判断。 数据类型的分类 要想判断数据类型,首先要知道数据类型的分类。数据类型分为基本数据类型和引用数据类型。 基本数据类型 基本数据类型有 五 种,ES6中新加了第 六 种...

    hoohack 评论0 收藏0
  • 在JavaScript中,如何判断数组是数组?

    摘要:比如我们今天要讨论的,在当中如何判断一个数组是数组。在数组的原型链上也能找到构造函数由上面的几行代码可以看出,使用运算符可以分辨数组和对象,可以判断数组是数组。用判断实例化的数组拥有一个属性,这个属性指向生成这个数组的方法。 如果你没有注意过这个问题,那么这个标题应该会让你感到困惑,判断数据类型这么基础的问题能有什么坑呢? 少年,你不能太天真了,我们朝夕面对的这门语言,可是JavaSc...

    kohoh_ 评论0 收藏0
  • JS数据类型& 判断

    摘要:的数据类型,共有六种。通常,数值字符串布尔值这三种类型,合称为原始类型的值,即它们是最基本的数据类型,不能再细分了。运算符返回一个布尔值,表示某个对象是否为指定的构造函数的实例。 以下内容摘自阮一峰-JavaScript-标准参考教程 数据类型 JavaScript 语言的每一个值,都属于某一种数据类型。JavaScript 的数据类型,共有六种。(ES6 又新增了第七种 Symbo...

    zhangxiangliang 评论0 收藏0
  • 标准库(一)object对象

    摘要:控制对象状态的方法防止对象扩展。判断一个对象是否被冻结。返回当前对象对应的值。方法的作用是返回一个对象的字符串形式上面代码表示,对于一个对象调用方法,会返回字符串用途通过自定义方法,可以让对象在自动类型转换时,得到想要的字符串形式。 概述Object()Object 构造函数Object 的静态方法「本身的方法Object.keys(),Object.getOwnPropertyNam...

    Muninn 评论0 收藏0
  • javascript 数据类型判断 (常见库的数据类型判断源码的分析)

    摘要:对象类型常见的有,,,正则新增自己提供的乐行判断如果不对对象做严格区分使用。的实现使用了原型继承的表示左表达式,表示右表达式,它是用是否等于来判断对象的类型的。常见框架和库的实数据类型判断测试这里将的实现原理抽取出来,用原生实现。 JavaScript一共有六种数据类型,分为原始类型(又名基本类型)和对象类型(又名引用类型) 原始类型有五种,分别为number,string,boole...

    libin19890520 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<