js判断类型:typeof Object.prototype.toString instanceof constructor有什么区别?一文讲清楚

这篇具有很好参考价值的文章主要介绍了js判断类型:typeof Object.prototype.toString instanceof constructor有什么区别?一文讲清楚。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

相信很多小伙伴在使用js的过程中,经常会需要对js的数据类型进行判断,而js中可以对数据类型进行判断的方法有很多种,最常见的有typeof、Object.prototype.toString、instanceof、constructor这四种,那么他们有什么区别呢?

目录

js数据类型

typeof

为啥typeof会将null判断为object

Object.prototype.toString

instanceof

constructor


js数据类型

先回顾下js的数据类型,js数据类型可分为两大类:

1.基本数据类型:又可以细分为七种:number string boolean undefined null bigint symbol

2.引用数据类型

typeof

基本数据类型均可判断(null除外,typeof会将null判断为object)

引用数据类型只可判断function,其他类型的引用数据均判断为object

//基本数据类型
et str='string'
console.log(typeof str) //string

let num=1
console.log(typeof num) //number

let ifRight=true
console.log(typeof ifRight) // boolean

let var1
console.log(typeof var1)  //undefined

let var2=null
console.log(typeof var2)   //注意这里打印的是object

let sym=Symbol('sym')
console.log(typeof sym) //symbol

let bInt=BigInt('1234567890')
console.log(typeof bInt) //bigint

//引用数据类型
function func(){return '3'}
console.log(typeof func) //function

let arr=new Array()
console.log(typeof arr)    //object

为啥typeof会将null判断为object

之前有次面试,面试官提了一嘴,当时没答上来,后来查了查感觉还挺有意思,贴个当时找的图 

js判断类型:typeof Object.prototype.toString instanceof constructor有什么区别?一文讲清楚,javascript,前端,开发语言

Object.prototype.toString

toString()是object的原型方法, 会返回一个格式为[object xxx]的内部属性,xxx就是对象的数据类型。

Object.prototype.toString可以判断所有的数据类型。

缺点:无法区分string(基本数据类型)和String(对象),number和Numbe等也同理

let str='string'
let str2=new String() //使用String构造函数创建

let num=1
let ifRight=true
let var1
let var2=null
let sym=Symbol('sym')
let bInt=BigInt('1234567890')
function func(){return '3'}
let arr=new Array()

console.log(Object.prototype.toString.call(str)) // [object String]
console.log(Object.prototype.toString.call(str2)) // [object String],和str的一样

console.log(Object.prototype.toString.call(num)) // [object Number]
console.log(Object.prototype.toString.call(ifRight))  // [object Boolean]
console.log(Object.prototype.toString.call(var1))  // [object Undefined]
console.log(Object.prototype.toString.call(var2))  // [object Null]
console.log(Object.prototype.toString.call(sym))  // [object Symbol]
console.log(Object.prototype.toString.call(bInt))  // [object BigInt]
console.log(Object.prototype.toString.call(func))  // [object Function]
console.log(Object.prototype.toString.call(arr))  // [object Array]

instanceof

instanceof运算符用来检测构造函数的ptototype属性是否出现在某个实例对象的原型链上,

所以只能用来判断引用数据类型,不能对基本数据类型进行判断

let str1=new String()
let str='string' //基本数据类型string
let map =new Map()
let arr1=new Array()
function func(){return '3'}




console.log(str1 instanceof String)  //true
console.log(str1 instanceof Object)  //true

console.log(str instanceof String)  //false 基本数据类型不可检测
console.log(str instanceof Object)  //false 基本数据类型不可检测

console.log(map instanceof Map)      //true
console.log(arr1 instanceof Array)   //true
console.log(func instanceof Function) //true

缺点:当一个页面存在多个ifream(也就是存在多个全局变量window),此时instanceof的判断会被来自不同ifream的数据所干扰,导致数据不可信。

js判断类型:typeof Object.prototype.toString instanceof constructor有什么区别?一文讲清楚,javascript,前端,开发语言

constructor

利用原型上的prototype.constructor指向实例的构造函数来进行判断

基本数据类型/引用数据类型均可判断

缺点:和Object.prototype.toString一样,无法区分string(基本数据类型)和String(对象),number和Numbe等也同理文章来源地址https://www.toymoban.com/news/detail-668262.html

let str1=new String()
let str='string'
let ifRight=true
let map =new Map()
let arr1=new Array()
function func(){return '3'}

console.log(str1.constructor===String)  //true
console.log(str.constructor===String)  //true 基本数据也可判断,但是无法和String区分
console.log(str.constructor===Object)  //false
console.log(ifRight.constructor===Boolean)  //true 基本数据类型

console.log(map.constructor===Map)     //true
console.log(arr1.constructor===Array)   //true
console.log(func.constructor===Function)  //true

到了这里,关于js判断类型:typeof Object.prototype.toString instanceof constructor有什么区别?一文讲清楚的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • js常用判断数据类型方法以及优缺点 以及 instanceof 原理实现

    使用typeof操作符可以 判断一个值的数据类型 。它返回一个表示数据类型的字符串。 优点:typeof 操作符是一种简单、快速的方式来 判断基本数据类型 。它返回的结果是一个字符串,可以直接用于条件判断。 缺点: 对于引用类型(除了函数)的判断结果都是\\\'object\\\' ,无法细

    2024年02月12日
    浏览(43)
  • Java对象类型的转换+instanceOf判断对象类型

    将子类的实例对象定义为父类类型,这种称为 向上转型 ;将父类的实例对象定义为子类类型,这种称为 向下转型 ,向下转型必须使用 显示转换 ,否则编译器会报错。           instanceof操作符,可以用来判断是否一个类实现了某个接口,也可以用来判断一个实例对象是否

    2024年02月08日
    浏览(47)
  • Java中使用instanceof判断对象类型

    记录 :470 场景 :Java中使用instanceof判断对象类型。例如在解析JSON字符串转换为指定类型时,先判断类型,再定向转换。在ListObject中遍历Object时,先判断类型,再定向转换。 版本 :JDK 1.8,Spring Boot 2.6.3。 一、解析Json字符串时,使用 instanceof判断对象类型 场景 :在基于微服

    2024年02月12日
    浏览(31)
  • prototype, construction, instanceof

    prototype 属性的作用 JavaScript 规定,每个函数都有一个 prototype 属性,指向一个对象。 上面代码中,函数 f 默认具有 prototype 属性,指向一个对象。 对于普通函数来说,该属性基本无用。但是,对于构造函数来说,生成实例的时候,该属性会自动成为实例对象的原型。 构造函

    2024年02月14日
    浏览(27)
  • [阅读MDN]之Array.prototype.toString的过程探究

     Array原型对象上的toString方法与Object.prototype上的toString方法不同,它进行了重写。Array.prototype.toString会先查看 执行时上下文 (this)及其原型链上是否具有 join 方法。 若 join 方法存在则会在内部执行 join 方法,类似 this.join(\\\',\\\') 。 若 join 方法不存在则会调用 Object.prototype.to

    2024年02月10日
    浏览(38)
  • js数据类型和判断数据类型的方法

    js数据类型 1.基本数据类型(原始类型): number boolean string null:空对象 undefined:未定义 Symbol(es6新增): 表示独一无二的值。 为了解决对象实例新的方法与已有方法名冲突问题 。 每个从 Symbol() 返回的 symbol 值都是唯一的,从而确保每个属性的名字都是独一无二的。 Sym

    2024年02月07日
    浏览(42)
  • Java杂记————object.getClass()和object.class以及Java中的toString()方法的的区别

    (这里补充一下:Class类,它就是一个类,它将普通的类作为它的对象: 每个普通类都只有一个Class对象 普通类的Class对象用getClass()方法或者class来获取     比如    同时我们还可以延伸Field属性类,Constructor构造器类) 需要注意的是: 直接用print之类的函数输出一个对象会

    2024年02月11日
    浏览(44)
  • 前端JS代码中Object类型数据的相关知识

    获取Object类型数据的方式有两种: 方括号获取: Object[\\\"arg1\\\"] 点·获取: Object.arg1 前端遍历Object类型数据的方式 遍历JavaScript中的对象有几种方法,包括使用for…in循环、Object.keys()方法、Object.values()方法和Object.entries()方法。以下是每种方法的示例代码: Object对象中的日期类型

    2024年01月20日
    浏览(58)
  • JS类型判断的那些方法

    目前类型判断有三种方法:typeof  、instanceof  、Object.prototype.toString.call typeof:只能判断基础类型和函数类型 instanceof:只能判断引用类型 Object.prototype.toString.call:可以判断各种类型,就是结果比较不友好 根据上面的各种方法,进行封装 1.基本类型和函数类型就直接用typeof直

    2024年02月11日
    浏览(37)
  • JS判断数组类型的方法详解

    判断 JavaScript 变量是否为数组类型可以使用以下方法: 使用 Array.isArray() 方法:这是一种确定变量是否为数组的最简单、最可靠的方法。该方法返回一个布尔值,如果变量是数组,则返回 true;否则返回 false。 使用 instanceof 运算符:该运算符用于判断一个变量是否为某个类型

    2024年02月16日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包