专栏首页coding个人笔记数据类型判断Object.prototype.toString.call

数据类型判断Object.prototype.toString.call

越学习越觉得基础的不牢固,不懂的,摸棱两可的,学了忘了的,在从入门到放弃的路上一直走着。今天分享一下数据类型判断的方法。

typeof:

很简单的使用,可以区分基础数据类型string、boolean、number、null、undefined、symbol,缺点就是没办法判断对象object:

console.log(typeof Symbol(''));//symbol
console.log(typeof 1);//number
console.log(typeof 's');//string
console.log(typeof undefined);//undefined
console.log(typeof true);//boolean
console.log(typeof function () {});//function
console.log(typeof null);//object
console.log(typeof {});//object
console.log(typeof []);//object
instanceof:

检测一个引用数据类型属于的类,检测构造函数的 prototype 属性是否出现在某个实例对象的原型链,要注意,是检测引用数据类型,基础数据类型不能检测(引用数据类型也都是Object的子类):

console.log(1 instanceof Number);//false
console.log('s' instanceof String);//false
console.log(true instanceof Boolean);//false
console.log(Function instanceof Function);//true
console.log(Function instanceof Object);//true
console.log([] instanceof Array);//true
console.log([] instanceof Object);//true
console.log({} instanceof Object);//true
function User() {};
let user = new User();
console.log(user instanceof User);//true
constructor:

判断由谁构造出来的,几乎不会使用:

let a = 1;
console.log(a.constructor === Number);//true
console.log(true.constructor === Boolean);//true
console.log('s'.constructor === String);//true
console.log([].constructor === Array);//true
console.log([].constructor === Object);//false
console.log(function () {}.constructor === Function);//true
console.log(function () {}.constructor === Object);//false
console.log({}.constructor === Object);//true
function User() {};
let user = new User();
console.log(user.constructor ===  User);//true
console.log(user.constructor ===  Object);//false
Objectprototype.toString.call/apply:

先明确一下,所有的子类都有toString方法,而Object.prototype上的toString是最原始的方法。对于所有数据类型,多少有些重写了toString方法,所以调用toString返回的跟Object.prototype.toString返回的不一样。比如undefined和null没有对应的构造函数,调用toString语法错误,函数调用toString得到的是函数代码,数组调用toString得到逗号分隔的字符串等。

而任何数据类型通过改变this都可以调用Object.prototype.toString:

console.log(Object.prototype.toString.call('s'));//[object String]
console.log(Object.prototype.toString.call(1));//[object Number]
console.log(Object.prototype.toString.call(true));//[object Boolean]
console.log(Object.prototype.toString.call(null));//[object Null]
console.log(Object.prototype.toString.call(undefined));//[object Undefined]
console.log(Object.prototype.toString.call({}));//[object Object]
console.log(Object.prototype.toString.call([]));//[object Array]
console.log(Object.prototype.toString.call(function(){}));//[object Function]
console.log(Object.prototype.toString.call(Math));//[object Math]
console.log(Object.prototype.toString.call(window));//[object Window]

之前也分享过,toString方法我们也可以重写,所以使用Object.prototype.toString.call判断数据类型是最合理的。对于toString方法,不同类型调用之后会产生什么结果,建议去了解一波,真的有点重要。

本文分享自微信公众号 - coding个人笔记(gh_2ce38b49dae1),作者:wade

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ES6之变量的解构赋值

    ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构。解构赋值在一些场景下还是很有用的。

    wade
  • ES6之数值的扩展

    之前说过,严格模式八进制不能使用前缀0表示,ES6规定必须使用0o。ES6提供了二进制和八进制的新写法:

    wade
  • node中的path模块

    path模块,其实还是在webpack中用过一下下,至于node,还没开始用。这个模块算是基础,当作是预习一下。

    wade
  • Js获取数据类型

    JavaScript有着七种基本类型String、Number、Boolean、Null、Undefined、Symbol、Object,前六种为基本数据类型,...

    WindrunnerMax
  • 从零开始学 Web 之 ES6(六)ES6基础语法四

    在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识点,期间也会分享一些好玩的项目。现在就让我们一起进入 Web 前端学习的冒险之旅吧!

    Daotin
  • Js中==与===

    JavaScript中提供==相等运算符与===严格相等运算符,建议是只要变量的数据类型能够确定,一律使用===

    WindrunnerMax
  • ES7、ES8、ES9、ES10新特性大盘点

    从 ECMAScript 2016(ES7)开始,版本发布变得更加频繁,每年发布一个新版本,好在每次版本的更新内容并不多,本文会细说这些新特性,尽可能和旧知识相...

    心莱科技雪雁
  • 第173天:面向对象——数据类型检测的四种方法

    使用typeof检测数据类型,首先返回的都是一个字符串,其次字符串中包含了对应的数据类型,例如:"number"、"string"、"boolean"、"und...

    半指温柔乐
  • 使用ES6新特性开发微信小程序(5)——内建对象的变化

    Object对象 Object.prototype.proto:对象具有属性proto,可称为隐式原型,一个对象的隐式原型指向构造该对象的构造函数的原型,这也保...

    极乐君
  • HanLP封装为web services服务的过程介绍

    前几天的召开的2019年大数据生态产业大会不知道大家关注到没有,看到消息是hanlp2.0版本发布了。不知道hanlp2.0版本又将带来哪些新的变化?准备近期看...

    IT小白龙

扫码关注云+社区

领取腾讯云代金券