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

devtools/2024/11/14 6:04:38/

一、js数据类型

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

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

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

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

  • 使用场景:

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

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

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

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

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

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

javascript">      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来定义常量,后面想要修改常量的值就会抛出错误。

javascript">      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存储更大的整数,确保数字的完整度和精确度。

javascript">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

javascript">      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

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

javascript">      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指向实例的构造函数来进行判断

javascript">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()

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

javascript">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]


http://www.ppmy.cn/devtools/47172.html

相关文章

flask基础知识1

目录 1.介绍 2.体验一下 3.配置参数: 4.路由和URL 1.路由 2.动态路由: 自定义转换器: 3.使用自定义转换器 5.url_for函数 6.request参数 7.处理响应: 1.重定向: 2.返回json数据: 3.返回模板&…

vuInhub靶场实战系列--prime:1

免责声明 本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关。 目录 免责声明前言一、环境配置1.1 靶场信息1.2 靶场配置 二、信息收集2.1 主机发现2.1.1 netdiscover2.1.2 nmap主机扫描2.1.3 arp-scan主机扫描 2.2 端口扫描…

TinyHttpd源码精读(三)

在上一章中我们一起看了如何实现静态的网页,在这里我们一起看Tinyhttpd最后的一部分,动态网页的实现:在这里首先声明下因为cgi脚本的支持问题,所以我会新建一个简单的cgi脚本然后将路径导向到这个脚本: 0.perl的配置&…

LeetCode刷题之HOT100之合并区间

雨下了一整天,中午早早就回去吃饭拿快递了,今天拿了很多快递。我的书回来啦哈哈,还有好多零食,爽歪歪啊,放在下面了,然后准备开始做题啦! 图一:左一是xh送我的,非常精彩…

流批一体计算引擎-10-[Flink]中的常用算子和DataStream转换

pyflink 处理 kafka数据 1 DataStream API 示例代码 从非空集合中读取数据,并将结果写入本地文件系统。 from pyflink.common.serialization import Encoder from pyflink.common.typeinfo import Types from pyflink.datastream import StreamExecutionEnviron…

QT 信号和槽 多对一关联示例,多个信号,一个槽函数响应,多个信号源如何绑定一个槽函数

三个顾客 Anderson、Bruce、Castiel 都要订饭,分别对应三个按钮,点击一个按钮,就会弹出给该顾客送饭的消息。注意这个例子只使用一个槽函数,而三个顾客名称是不一样的,弹窗时显示的消息不一样,这需要一些 技…

golang协程(go)与信道(chan)使用示例

函数定义 // 普通函数 func f(from string) {//输出三次传入的字符串for i : 0; i < 50; i {fmt.Println(from, ":", i)} } 协程调用 //使用go协程调用函数go f("go routines > Hello World") 局部函数go协程使用 //使用协和调用临时函数go fun…

内存池(Memory Pool)

内存池&#xff08;Memory Pool&#xff09; 内存池&#xff08;Memory Pool&#xff09;是一种内存管理技术&#xff0c;主要用于优化程序中动态内存分配和释放的效率&#xff0c;减少内存碎片&#xff0c;提高程序运行速度。以下是内存池的一些关键概念和工作原理介绍&#…