当前位置: 首页 > news >正文

检测数据的方法(回顾)

  • 检测数据类型的4种方法
  • typeof
  • instanceof
  • constructor
  • {}.toString.call()

检测数据类型的4种方法

typeof

定义

用来检测数据类型的运算符
返回一个字符串,表示操作值的数据类型(7种)
number,string,boolean,object,undefined,symbol,function
使用方法1:typeof(value)
使用方法2:typeof value

typeof(null)

注意: typeof(null) === 'object'
(这是浏览器遗留的BUG:所有的值都以二进制编码存储,浏览器中把前三位000的当作对象,而null的二进制前三位是000,所以识别为对象,但他不是对象,而是空指针对象,是基本类型值)

typeof(undefined)

typeof undefined === ‘undefined’
注意:typeof 未声明的变量,返回 'undefined'

typeof a;//'undefined'
typeof typeof a;//'string'

instanceof

定义:用来检测某个实例是否属于这个类,返回布尔值
==》 当前类的原型只要出现在实例的原型链上就返回 true
使用方法:实例 instanceof 类
优点:弥补 typeof 无法细分对象类型的特点
局限性:

  1. 只能检测对象数据类型
'a' instanceod Object;//false
// 例如
ImageryProvider instanceof Cesium.ImageryProvider
  1. 构造函数创建的基本类型可以检测
var a = new String('a')
a instanceof Object
  1. 万物皆对象,数组对象正则都是 Object的实例

constructor

定义:判断当前的实例的 constructor 的属性值,返回函数
==》 利用他的实例的构造函数检测
==》 一般实例.constructor === 类.prototype.constructor
使用方法:实例.constructor === 类
优点:能够检测所有的数据类型,包括自定义类

function Person (){...}
new Person().constructor; //ƒ Person (){}

缺点:JS中的 constructor 是不被保护的,可以重定向

Array.constructor;// f Array () {}
Array.constructor = 1;// 1

{}.toString.call() 推荐

定义:对象原型上的toString方法,能返回当前实例所属类的信息 ==》返回字符串
使用方法:Object.prototype.toString.call(被检测的实例)
优点:基本能基础所有的数据类型

console.log({}.toString.call(1));// '[object Number]'
console.log({}.toString.call('a'));// '[object String]'
console.log({}.toString.call(true));// '[object Boolean]'
console.log({}.toString.call(Symbol.for('a')));// '[object Symbol]'
console.log({}.toString.call(undefined));// '[object Undefined]'
console.log({}.toString.call(null));// '[object Null]'
console.log({}.toString.call({}));// '[object Object]'
console.log({}.toString.call([]));// '[object Array]'
console.log({}.toString.call(/a/g));// '[object RegExp]'

局限性:自定义类都返回 '[object Object]'

function Test(a){this.a = 1}
let test = new Test(1)
console.log({}.toString.call(test))//'[object Object]'
http://www.lryc.cn/news/14531.html

相关文章:

  • 比特数据结构与算法(第三章_上)栈的概念和实现(力扣:20. 有效的括号)
  • JVM13 类的生命周期
  • Docker网络模式解析
  • 游山城重庆
  • Vuex的创建和简单使用
  • Arduino IDE搭建Heltec开发板开发环境
  • Using the GNU Compiler Collection 目录翻译
  • 使用 OpenCV for Android 进行图像特征检测
  • chatGPT笔记
  • 这么好的政策和创新基地,年轻人有梦想你就来
  • 【Kubernetes】【十九】安全认证
  • Apache Flink 实时计算在美的多业务场景下的应用与实践
  • 27 pandas 数据透视
  • 1.2 学习环境准备
  • Http1.0协议常识
  • “终于懂了” 系列:组件化框架 ARouter 完全解析(三)AGP/Transform/ASM—动态代码注入
  • 传闻腾讯引进Quest 2?我觉得可行性很低
  • 【数据集】CMIP6气候模式数据下载
  • 华为OD机试 - 最长的元音字符串 | 机试题算法思路 【2023】
  • 浅谈c++引用
  • 2023什么是分销商城?怎么搭建分销商城
  • 408数据结构考点总结
  • 虹科分享 | 网络流量监控 | 你的数据能告诉你什么:解读网络可见性的4种数据类型
  • SpringBoot日志框架使用详解
  • 剑指offer-消失的数字、数组中出现的次数
  • axios请求配置baseURL选项
  • 风储VSG-基于虚拟同步发电机的风储并网系统MATLAB仿真
  • vim常用命令
  • 华为OD机试 - 最差产品奖 | 机试题算法思路 【2023】
  • HR:你会Python数据分析吗?