• 493 JS中数据类型检测的四种方案


    1. typeof
      语法:typeof [val] 返回当前值对应的数据类型(STRING)
      优势:检测基本类型值还是很准确的,而且操作起来方便
      略势:
      typeof null =>"object" 【01开头存储的是对象。】
      typeof 检测数组/对象/正则等都是 "object",所以无法对对象数据类型细分

    1. instanceof
      语法:[val] instanceof 类, 通过检测这个值是否属于这个类,从而验证是否为这个类型
      优势:对于数组、正则、对象可以细分一下
      略势:
      基本数据类型无法基于它来进行检测
      检测的原理:只要在当前实例的__proto__出现这个类,检测结果都是TRUR

    1. constructor
      和instanceof类似,也是非专业检测数据类型的,但是可以这样处理一下
      语法:[val].constructor === 类
      相对于instanceof来讲,基本类型也可以处理,而且因为获取实例的constructor实际上获取的是直接所属的类,
      所以在检测准确性上比instanceof还好一点
      略势:constructor是可以随意被改动的

    1. Object.prototype.toString.call([val]):最强大的检测方案
      在其它数据类型的内置类原型上有toString,但是都是用来转换为字符串的,
      只有Object基类原型上的toString是用来检测数据类型的。
      [11, 22].toString()的结果:去掉逗号后面空格的"11,22"。
      obj.toString(): obj这个实例调用Object.prototype.toString执行,方法执行里面的THIS是当前操作的实例OBJ,此方法就是检测实例THIS的数据类型的,返回结果:"[object 所属的类]"。
      Object.prototype.toString.call([val]) 基于call强制改变方法中的this是[val],就相当于在检测val的数据类型 <=> ({}).toString.call([val])
      【 ({}).toString拿到 Object.prototype.toString。{} 可以是语句块,也可以是 对象字面量。】
  • 相关阅读:
    转换上午下午 时间
    Canvas
    DOS Card (线段树)(hud杭电多校)
    ShuanQ (取模的小知识)(杭电多校)
    Painting Game (博弈论)
    Two Permutations (DP搜索的方式) (2022杭电多校3)
    Slayers Come (区间覆盖种类数(dp+线段树)+ st表+二分,或者线段树) (2022杭电多校2)
    copy (倒叙离线+bitset+^特性) (hud 2022多校 2)
    Static Query on Tree (述链剖分+线段树)(2022杭电多校)
    Fast Bubble Sort (单调zai+倍增) (2022杭电多校10)
  • 原文地址:https://www.cnblogs.com/jianjie/p/13217407.html
Copyright © 2020-2023  润新知