首页 > 其他分享 >Day04 - 判断数据类型的方式有哪些?| 面试365

Day04 - 判断数据类型的方式有哪些?| 面试365

时间:2023-03-21 18:06:14浏览次数:43  
标签:instanceof console log Object 数据类型 Day04 constructor 365


知识讲解

​JavaScript​​ 判断数据类型的方式共有四种

  1. typeof
  2. instanceof
  3. constructor
  4. Object.prototype.toString

typeof

​typeof​​ 操作符返回一个字符串,表示操作值的类型

利用 ​​typeof​​​ 判断数据类型的语法是 ​​typeof target​​。 示例如下:

// 'number'
console.log(typeof 123)
// 'string'
console.log(typeof '123')
// 'boolean'
console.log(typeof true)
// 'symbol'
console.log(typeof Symbol(123))
// 'object'
console.log(typeof [])
// 'object'
console.log(typeof {})
// 'function'
console.log(typeof function(){})
// 'undefined'
console.log(typeof undefined)
// 'object'
console.log(typeof null)
// 'object'
console.log(typeof new Date())
// 'object'
console.log(typeof /\d/g)
// 'object'
console.log(typeof new Error())
typeof` 可以准确判断除 `null` 之外的所有基本数据类型以及 `Function`
对于 `null` 及其他引用数据类型都返回 `object

instanceof

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

利用 ​​instanceof​​​ 判断数据类型的语法是 ​​target instanceof constructor​​。 示例如下:

// false
console.log(123 instanceof Number)
// false
console.log('123' instanceof String)
// false
console.log(true instanceof Boolean)
// false
console.log(Symbol(123) instanceof Symbol)
// true
console.log([] instanceof Array)
// true
console.log({} instanceof Object)
// true
console.log(function(){} instanceof Function)
// TypeError: Right-hand side of 'instanceof' is not an object
console.log(undefined instanceof undefined)
// TypeError: Right-hand side of 'instanceof' is not an object
console.log(null instanceof null)
// true
console.log(new Date() instanceof Date)
// true
console.log(/\d/g instanceof RegExp)
// true
console.log(new Error() instanceof Error)

用于判断操作值是否是指定构造函数的实例。

缺点:

  1. 不能判断基本数据类型,因为基本数据类型并不是构造函数的实例,没有原型链。
  2. 因为原型链的终点是 ​​Object.protype => null​​​,所以引用数据类型的原型链上都会存在 ​​Object.protype​​​,所以引用数据类型 ​​instanceof Object​​​ 的时候都返回 ​​true​​。
  3. 原型链可以被修改,所以结果值不一定准确。

constructor

利用 ​​constructor​​​ 判断数据类型的语法是 ​​target.constructor === constructor​​。 示例如下:

// Number
console.log((123).constructor)
// String
console.log('123'.constructor)
// Boolean
console.log(true.constructor)
// Symbol
console.log(Symbol(123).constructor)
// Array
console.log([].constructor)
// Object
console.log({}.constructor)
// Function
console.log(function(){}.constructor)
// TypeError: Cannot read properties of undefined (reading 'constructor')
console.log(undefined.constructor)
// TypeError: Cannot read properties of null (reading 'constructor')
console.log(null.constructor)
// Date
console.log(new Date().constructor)
// RegExp
console.log(/\d/g.constructor)
// Error
console.log(new Error().constructor)

用于判断操作值是否是指定构造函数的实例,可以判断 ​​null​​​ 和 ​​undefined​​​除外的所有数据类型,之所以 ​​null​​​ 和 ​​undefined​​​ 不可以,是因为他们作为 ​​JavaScript​​​ 运行环境创建时就存在的基本数据类型,不存在 ​​constructor​​ 属性

基本数据类型为什么会有 ​​constructor​​​ 属性呢? 是因为基本数据类型获取 ​​constructor​​​ 属性的时候,​​JavaScript​​ 自动将基本数据类型的值转为包装对象实例,并在使用后立刻销毁实例。

缺点:​​constructor​​ 属性可以被修改,所以结果值不一定准确。

Object.prototype.toString

返回对象的类型字符串.

利用 ​​Object.prototype.toString​​​ 判断数据类型的语法是 ​​Object.prototype.toString.call(target)​​。 示例如下:

// '[object Number]'
console.log(Object.prototype.toString.call(123))
// '[object String]'
console.log(Object.prototype.toString.call('123'))
// '[object Boolean]'
console.log(Object.prototype.toString.call(true))
// '[object Symbol]'
console.log(Object.prototype.toString.call(Symbol(123)))
// '[object Array]'
console.log(Object.prototype.toString.call([]))
// '[object Object]'
console.log(Object.prototype.toString.call({}))
// '[object Function]'
console.log(Object.prototype.toString.call(function(){}))
// '[object Undefined]'
console.log(Object.prototype.toString.call(undefined))
// '[object Null]'
console.log(Object.prototype.toString.call(null))
// '[object Date]'
console.log(Object.prototype.toString.call(new Date()))
// '[object RegExp]'
console.log(Object.prototype.toString.call(/\d/g))
// '[object Error]'
console.log(Object.prototype.toString.call(new Error()))

可以准确判断所有数据类型。

总结

typeof

instanceof

constructor

Object.prototype.toString

number





string





boolean





symbol





[]





{}





function() {}





undefined





null





new Date()





/\d/g





new Error()





面试攻略

  • 主要是记区别和不能判断的原因说清楚。

点评

标签:instanceof,console,log,Object,数据类型,Day04,constructor,365
From: https://blog.51cto.com/u_16011013/6140735

相关文章

  • algrothm_基本数据类型和引用类型变量
    ......
  • 爬虫----day04()
    昨日回顾#1beautifulsoup4使用 -xml解析库,用它来解析爬取回来的html内容,从中找出我们需要的内容#2遍历文档树 -.的使用soup.html.body.p.a-获取属性......
  • [1]Python基础语法-【2】数据类型
    在Python中,有多种不同的数据类型可供使用。这些数据类型包括数字、字符串、列表、元组、字典和集合。在本教程中,我们将介绍这些数据类型的定义和基本操作。数字数字是Pyt......
  • Redis的五种数据类型及其应用场景
    1、数据类型String(字符串,整数,浮点数):做简单的键值对缓存List(列表):储存一些列表类型的数据结构Hash(哈希):包含键值对的无序散列表,结构化的数据Set(无序集合):交集,并集......
  • Python——高级数据类型(七)
    1.列表数据类型的声明与访问#coding=utf-8#列表数据类型的声明与访问my_list=[1,2,3,4,5]#列表中的元素print(my_list)#0123角标,索引位置信息m......
  • java基础_引用数据类型_数组_2
    前言紧接上回没讲完的数组,接下来讲多维数组,以二维数组为例。二维数组的定义二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组。如何使用方法一:声......
  • Qt5.12实战之基本数据类型
    注:macosx下要加上#include<QIODevice>//formacosxendl替换为Qt::endl;示例源码:#include<QCoreApplication>#include<QDebug>#include<QTextStream>stat......
  • Halcon Dict字典数据类型获取键的值
    对于下面这个字典变量  要访问键‘classfication_class_ids’对应的值不能使用传统写法:DLResultBatch['classfication_class_ids']直接访问要使用get_dict_tuple函......
  • 数据类型之间的转换
    1#1.接收用户输入2num=input('请输入您的幸运数字:')34#2.打印结果5print(f"您的幸运数字是{num}")67#3.检测接收到的用户输入的数据类型--......
  • java的数据类型
    2023-03-19java是强类型语言要求变量的使用严格符合规定,所有的变量需要先定义、后才能使用java的数据类型分为两大类1、基本类型 2、引用类型引用数据类型包括类......