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

4、js数据类型,检测数据类型

一、js数据类型

  1. 基本(简单、原始)数据类型:number/string/boolean/undefined/null/symbol/bigint
  2. 引用(复杂)数组类型:object(function,array,date)

1、symbol是什么?有什么作用?使用场景?

symbol是es6新增的基本数据类型,叫做符号。符号实例是唯一的不可变的。

作用:确保对象属性使用唯一标识符,不会发生属性冲突。

  • 使用场景:

(1)作为对象唯一属性名

 确保对象属性名的唯一性,避免命名冲突。

      let gender = Symbol();let people = {};people[gender]='女';console.log(people[gender]);//女

(2)作为对象属性的隐藏标识

利用symbol()给对象定义一些不想对外操作和访问的属性。

因为,symbol()类型定义的对象的key值不能通过object.keys()或者for in来枚举。

      let gender = Symbol();let person = {name: 'cgp',age: 18,[gender]: '女',};for (const key of Object.keys(person)) {console.log(key);//name age}for (let key in person) {console.log(key); //name age}

(3)定义常量

当需要定义的常量很多时,要考虑到常量唯一值的设定。当用symbol来定义常量,后面想要修改常量的值就会抛出错误。

      const PI = Symbol('π');// 由于Symbol的唯一性,我们可以确保PI不会被意外修改// 尝试修改PI的值会抛出错误PI = 3.14; // 这会抛出错误 Uncaught TypeError: Assignment to constant variable.console.log(PI); // 输出: Symbol(π)

2、bigint是什么?有什么作用?使用场景?

bigint用于表示任意精度格式的整数。

作用:

存储比js默认更大的整数,确保数据完整度和计算精度。

  • 使用场景:

当普通的number存储更大的数字时,会出现不精确的情况。用bigint存储更大的整数,确保数字的完整度和精确度。

const big1 = BigInt(1234567890123456789012344563784);const big2 = 12345678992736n;console.log(typeof big1);//bigintconsole.log(big1);//1234567890123456849145940148224nconsole.log(typeof big2);//bigintconst num1 = 124894637849362739274859;console.log(num1);//1.2489463784936274e+23

二、检测数据类型

1、typeof

适用:准确的判断简单数据类型 

特殊的:检测 空数组[] 、{}  、正则 >>object   检测函数>>function

      console.log(typeof 123);//numberconsole.log(typeof 'abcd');//stringconsole.log(typeof true);//booleanconsole.log(typeof a);//undefinedlet b = Symbol();let c = Symbol();console.log(b);//Symbol()console.log(c); //Symbol()     console.log(b==c); //false  let f = Symbol('sym');console.log(f);   //Symbol(sym)console.log(typeof null);//objectlet d = null;console.log(typeof d);//objectconsole.log(d==null)//trueconsole.log(d===null)//trueconsole.log(typeof function () {});//function console.log(typeof []); //object let e = [1,2,3]console.log(typeof e);//objectconsole.log(typeof {});//objectconsole.log(typeof /\d/);//object 正则

2、instanceof

适用:可以准确的判断复杂数据类型(array date ) ,不能检测基本数据类型会全部返回false

原理:判断在对象的原型链中是否能找到该类型的原型

      let arr = [];console.log(arr instanceof Array); // truelet date = new Date();console.log(date instanceof Date); // truelet add = function(){};console.log(add instanceof Function);//true

3、constructor(不推荐)

适用:引用数据类型(不能检测基本数据类型)

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

let arr = [];  
console.log(arr.constructor === Array); // true  let date = new Date();  
console.log(date.constructor === Date); // true  let reg = /a/g;  
console.log(reg.constructor === RegExp); // true  let func = function() {};  
console.log(func.constructor === Function); // true  let obj = {};  
console.log(obj.constructor === Object); // true

 4、Object.prototype.toString.call()

适用于:简单、复杂数据类型

let arr = [];console.log(Object.prototype.toString.call(arr)); // [object Array]let date = new Date();console.log(Object.prototype.toString.call(date)); // [object Date]let reg = /a/g;console.log(Object.prototype.toString.call(reg)); // [object RegExp]let func = function () {};console.log(Object.prototype.toString.call(func)); // [object Function]let str = 'hello';console.log(Object.prototype.toString.call(str)); // [object String]

相关文章:

  • webrtc vp8/9视频编解码介绍
  • 【C语言】04.循环结构
  • Flink 基于 TDMQ Apache Pulsar 的离线场景使用实践
  • 如何开发一 VSCode 插件
  • 【动手学深度学习】使用块的网络(VGG)的研究详情
  • 【vector模拟实现】附加代码讲解
  • 小程序如何刷新当前页面
  • 自动化测试-Selenium-元素定位
  • Avalonia TreeView 示例代码
  • 双网卡配置IP和路由总结
  • 【计算视觉】学习计算机视觉你不得不膜拜的CVPR大神:何凯明
  • gulimall-search P125 springboot整合elasticsearch版本冲突
  • Windows系统问题
  • Java项目如何外发告警日志到企业微信
  • java进阶——JVM 与 Java 体系结构详解
  • @angular/forms 源码解析之双向绑定
  • [译] 怎样写一个基础的编译器
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • centos安装java运行环境jdk+tomcat
  • CSS魔法堂:Absolute Positioning就这个样
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • input的行数自动增减
  • Logstash 参考指南(目录)
  • Map集合、散列表、红黑树介绍
  • overflow: hidden IE7无效
  • Protobuf3语言指南
  • SwizzleMethod 黑魔法
  • windows-nginx-https-本地配置
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 今年的LC3大会没了?
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 入门到放弃node系列之Hello Word篇
  • 设计模式 开闭原则
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 详解移动APP与web APP的区别
  • 想写好前端,先练好内功
  • 一些关于Rust在2019年的思考
  • C# - 为值类型重定义相等性
  • ​secrets --- 生成管理密码的安全随机数​
  • ​批处理文件中的errorlevel用法
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #1014 : Trie树
  • #LLM入门|Prompt#3.3_存储_Memory
  • #mysql 8.0 踩坑日记
  • $.ajax中的eval及dataType
  • (23)Linux的软硬连接
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (每日一问)计算机网络:浏览器输入一个地址到跳出网页这个过程中发生了哪些事情?(废话少说版)
  • (一)RocketMQ初步认识
  • (转)VC++中ondraw在什么时候调用的
  • .env.development、.env.production、.env.staging
  • .gitattributes 文件