首页 > 其他分享 >【JS】数据类型检测

【JS】数据类型检测

时间:2022-10-29 21:13:19浏览次数:62  
标签:instanceof console log 检测 Symbol 数据类型 JS typeof true

数据类型检测方法:

  1. typeof

  2. instanceof

  3.  Object.prototype.toSting.call()

/*
    1.typeof 运算符
    返回值:参数类型字符串
    - 可以区分基本数据类型,除了null
    - 无法区分null、Array等内建对象、Object,结果都为object
*/

// 检验基本类型数据
console.log(typeof 1); // number
console.log(typeof 'a'); // string
console.log(typeof true); // boolean
console.log(typeof undefined); // undefined
console.log(typeof Symbol('s')); // symbol
console.log(typeof 9n); // bigint
console.log(typeof null); // object
// 检验引用类型数据
console.log(typeof {}); // object
console.log(typeof []); // object
console.log(typeof function(){}); // function
 /*
  2.instanceof 
    1. instanceof是如何判断的?
            - 表达式:A instanceof B
            - 1.如果B中有静态方法 Symbol.hasInstance,那就直接调用这个方法
            - 2.如果B函数的显示原型对象在A对象的原型链上,返回true,否则返回fasle
*/
        class Animal {}
        class Cat extends Animal {}
        const cat = new Cat()

        console.log(cat instanceof Cat); // true
        console.log(cat instanceof Animal); // true
/*
    2. Function是通过new自己产生的实例 Function.__proto__ == Function.prototype
    3.  objA.isPrototypeOf(objB), 检查objA是否是objB的原型,所以可以使用Class.prototype.isPrototypeOf(obj) 检查一个对象是否是一个类的实例。
        // ...
        console.log(Cat.prototype.isPrototypeOf(cat)); // true
*/

/*
    instanceof
    能够区分Array、Object和Function,适合用于判断自定义的类实例对象
    无法区分基本数据类型
*/
// 检验原始类型数据
console.log(1 instanceof Number); // false
console.log('a' instanceof String); // false
console.log(true instanceof Boolean); // false
console.log(Symbol('s') instanceof Symbol); // false
console.log(9n instanceof BigInt); // false
// 检验引用类型数据
console.log({} instanceof Object); //true
console.log([] instanceof Array); // true
console.log(function(){} instanceof Function); // true
3. Object.prototype.toString.call()
    - 精准判断数据类型
    - 原始数据类型,内建对象,包含 Symbol.toStringTag 属性的对象

- 内建的 toString 方法可以被从对象中提取出来,并在任何其他值的上下文中执行。
    const objToString = Object.prototype.toString
    const arr = []
    console.log(objToString.call(arr)); // [object Array]

- 用 {}.toString.call 替代 instanceof, 不仅能检查类型还能返回类型信息,而且原始类型也能检查。
可以使用特殊的对象属性 Symbol.toStringTag 自定义对象的 toString 方法的行为。
    const obj = {
        [Symbol.toStringTag]: 'custom'
    }
    console.log({}.toString.call(obj)); // [object custom]

 

标签:instanceof,console,log,检测,Symbol,数据类型,JS,typeof,true
From: https://www.cnblogs.com/ahoge/p/16839859.html

相关文章

  • 从新开始学JAVA - 数据类型6
    数据类型Java的数据类型有两大类基本类型(primitivetype)基本类型都属于关键字引用类型(referencetype)类接口数组具体分类基本类型又可以细分为以下类型......
  • 深入 Slate.js 编辑器 - 引言
    深入Slate.js编辑器-引言钉钉文档阿里巴巴-智能协同与视频云-钉钉文档团队​关注他 54人赞同了该文章我们是钉钉的文档协同团队,我们在......
  • JS CSS HTML 加载顺序
    JSCSSHTML加载顺序 解析:运行代码加载:下载代码JS脚本(因为js修改DOM,所以需要先js解析)script标签:阻塞html文档的解析,直到脚本执行完外引js:先网络......
  • html,css,js加载顺序
    <headlang="en"><metacharset="utf-8"><title></title><linkrel="stylesheet"href="css/*.css"><scriptsrc="js/*.js></script></head>DOM文......
  • MySQL数据库数据类型
    MySQL数据库数据类型 MySQL数据类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。 数值类型:类型大小范围(有符号)范围(无符号)用途TINY......
  • 【JS】扩展内建类 - Symbol.species
    species是个函数值属性,其被构造函数用以创建派生对象,species访问器属性允许子类覆盖对象的默认构造函数。 JS内建类可以被扩展classMyArrayextendsArray{......
  • js 字符串中包含逗号和分号分析成数组
    varstr="117.39755436808615,34.59211450864094;117.39783481906638,34.59185738594207;117.39825396841732,34.59151467824745;117.39895365857903,34.5909999082......
  • js 数组-过滤数据
    js数组-过滤数据filter()方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。注意:filter()不会对空数组进行检测。注意:filter()不会改......
  • 1_js中过滤器filter简单实现
    filterAPI自实现我感觉这个API我用起来不是很顺畅我自己写一个看看分析这是api参考手册设计思路抛开其他的不谈,filter本质上就是原型Array上的一个函数==ap......
  • 【Node.JS 练习】时钟案例
    目录​​案例要求​​​​实现​​​​步骤​​​​创建正则表达式​​​​使用相关模块,读取需要被处理的html文件​​​​自定义resolve方法​​​​css​​​​ js​​......