JS数据类型

数据类型

一、js 数据类型

  • Null
  • Undefined
  • Boolean
  • Number
  • BigInt
  • String
  • Symbol
  • Object

Null

Null 类型 只有一个值 null

Undefined

Undefined 类型 只有一个值 undefined ,undefined 表示值缺失, null 表示对象缺失

Boolean

Boolean 类型有 2 个值,true 和 false

Number

  1. 创建方式
  • 使用 let xxx = 1 新建 number (创出来的是 number 原始值)
  • 使用 let xxx = new Number(1) 函数创建(创出来的是 number 对象,MMDN 官方建议尽量不要这样用)
let a = 1
let b = new Number(1)console.log(typeof a, a); // number 1 
console.log(typeof b, b); // object Number {1}
  1. Number 类型可以安全存储以下范围内的数字
  • 2的-1074次方(Number.MIN_VALUE)和 2的1024次方(Number.MAX_VALUE)之间的正浮点数
  • -2的-1074次方(Number.MIN_VALUE)和 -2的1024次方(Number.MAX_VALUE)之间的负浮点数
  • -(2的53次方 − 1)(Number.MIN_SAFE_INTEGER)到 2的53次方 − 1(Number.MAX_SAFE_INTEGER)范围内的整数
  1. 检查数字是否在安全范围方法 Number.isSafeInteger(x)

  2. NaN是运算结果不表示数字时的结果,也是 js 中唯一不等于自身的值

BigInt

  1. 如何使用 BigInt
  • n 附加在整数末尾
  • 调用 BigInt()
const x = 9999999999999n;const y = BigInt(9999999999999);console.log(x == y); // 结果为 true
  1. BigInt 可以用来存储任意大的整数,但是不能存储浮点数
const x = 99999999999.99n
console.log(x) // 结果为报错 Uncaught SyntaxError: Invalid or unexpected token
  1. BigInt 运算过程中产生的浮点数会被取整
const x = 4n;
const y = 3n;
console.log(x / y); // 结果是 1n 而不是 1.3333333333333
  1. BigInt 与 Number 不严格相等,但是宽松相等
const x = 1n; // BigInt 类型的数值 1const y = 1; // Number 类型的数值 1console.log(x === y); // 结果为 false
console.log(x == y); // 结果为 true
  1. BigInt 和 Number 类型的数值可以进行比较, 也可以混合在一个数组中进行排序
const mixed = [4n, 6, -12n, 10, 4, 0, 0n];
// ↪  [4n, 6, -12n, 10, 4, 0, 0n]mixed.sort();
// ↪ [-12n, 0, 0n, 10, 4n, 4, 6]
  1. 被 Object 包装的 BigInt 使用 Object 的比较规则
const x = Object(0n);
const y = Object(0n);
console.log(x === y); // false
  1. BigInt 类型的数值不可以直接 JSON.stringify() 转换为 JSON ,因为无法序列化
const x = BigInt(1);
console.log(JSON.stringify(x)); // Uncaught TypeError: Do not know how to serialize a BigInt// 先定义 toJSON 方法
BigInt.prototype.toJSON = function () {return this.toString();
};// 使用定义的 toJSON 方法进行序列化
const y = BigInt(1);
console.log(y.toJSON()); // 1
  1. BigInt 与 Number 转换会损失精度,仅建议在数据大于 2的1024次方 时使用

String

  1. 创建方式
  • 使用 ''"" 新建字符串(创出来的是字符串原始值)
  • 使用 new String() 函数创建(创出来的是字符串对象,MMDN 官方建议尽量不要这样用)
const s1 = "2 + 2";
const s2 = new String("2 + 2");
const s3 = s2.valueOf(); // String 对象始终可以使用 valueOf() 方法将其转换为对应的原始值console.log(s1); // 结果 2 + 2
console.log(s2); // 结果 String {'2 + 2'}
console.log(s3); // 结果 2 + 2
  1. 字符串比较(所有比较都区分大小写)
const a = "a";
const b = "b";
console.log(a < b); // 结果 true 即 "a" < "b"const a = "a";
const A = "A";
console.log(a < A); // 结果 false 即同字母,小写 > 大写
  1. 字符串可以按照下标进行访问
const s1 = "hello world!";
console.log(s1[6]); // 结果为 w ,空格也占据下标

Symbol

  1. 如何创建 Symbol 类型的值
const symbol1 = Symbol();
console.log(typeof symbol1); // 结果 symbolconst symbol2 = Symbol(42);
console.log(symbol2); // 结果 Symbol(42)
  1. Symbol 是唯一并且不可变的原始值
const symbol3 = Symbol(42);
console.log(symbol3 === 42); // 结果 false,不可修改const symbol4 = Symbol("foo");
console.log(typeof symbol4.toString(),symbol4.toString(),typeof symbol4,symbol4
); // 结果 string Symbol(foo) symbol Symbol(foo)
  1. 每次都创建新的 Symbol
const symbol5 = Symbol("foo");
const symbol6 = Symbol("foo");
console.log(symbol5 === symbol6); // 结果 false

Object

二、类型判断

  1. typeof:能判断所有值类型,函数。不可对 null、对象、数组进行精确判断,因为都返回 object
console.log(typeof undefined); // undefined
console.log(typeof 2); // number
console.log(typeof true); // boolean
console.log(typeof "str"); // string
console.log(typeof Symbol("foo")); // symbol
console.log(typeof 2172141653n); // bigint
console.log(typeof function () {}); // function
// 不能判别
console.log(typeof []); // object
console.log(typeof {}); // object
console.log(typeof null); // object
  1. instanceof: 能判断对象类型(包括继承关系都能找到),但不能判断基础数据类型

instanceof 运行机制是 判断在其原型链中能否找到该类型的原型

class People {}
class Student extends People {}const vortesnail = new Student();console.log(vortesnail instanceof People); // true
console.log(vortesnail instanceof Student); // true
  1. Object.prototype.toString.call():所有原始数据类型都是能判断的,还有 Error 对象,Date 对象
Object.prototype.toString.call(2); // "[object Number]"
Object.prototype.toString.call(""); // "[object String]"
Object.prototype.toString.call(true); // "[object Boolean]"
Object.prototype.toString.call(undefined); // "[object Undefined]"
Object.prototype.toString.call(null); // "[object Null]"
Object.prototype.toString.call(Math); // "[object Math]"
Object.prototype.toString.call({}); // "[object Object]"
Object.prototype.toString.call([]); // "[object Array]"
Object.prototype.toString.call(function () {}); // "[object Function]"

三、类型判断实践

如何判断一个变量为数组

const arr = ["111", "sss1", "**", 12, { name: "tom" }, [12, "a1"]];// 1. Array.isArray() 函数
Array.isArray(arr); // true// 2. __ proto__属性 判断
arr.__proto__ === Array.prototype; // true// 3. instanceof 查找继承
arr instanceof Array; // true// 4.  Object.prototype.toString.call() 判断
Object.prototype.toString.call(arr); // "[object Array]"

四、参考资料

  • https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Data_structures
  • https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Data_structures#string_%E7%B1%BB%E5%9E%8B
  • https://blog.csdn.net/aaahuahua/article/details/123882822

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/190540.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【前端】-【electron】

文章目录 介绍electron工作流程环境搭建 electron生命周期&#xff08;app的生命周期&#xff09;窗口尺寸窗口标题自定义窗口的实现阻止窗口关闭父子及模态窗口自定义菜单 介绍 electron技术架构&#xff1a;chromium、node.js、native.apis electron工作流程 桌面应用就是…

常见的攻击防护

只做模拟机器使用&#xff0c;不使用真实机器 目录 一、 DHCP饿死和防护应对措施.................................. 1 1&#xff0c; 实验拓扑&#xff1a;...................................................... 2 2&#xff0c; 实验配置............................…

Web自动化测试怎么做?Web自动化测试的详细流程和步骤

1.什么是web自动化测试 自动化&#xff08;Automation&#xff09;是指机器设备、系统或过程&#xff08;生产、管理过程&#xff09;在没有人或较少人的直接参与下&#xff0c;按照人的要求&#xff0c;经过自动检测、信息处理、分析判断、操纵控制&#xff0c;实现预期的目标…

opencv阈值处理

阈值处理 二值化 自适应阈值 OTSU二值化

latex表格中内容过多如何换行【已解决】

最近在写论文的时候放了一个表格&#xff0c;但是表格看起来特别大&#xff0c;因为想让某些内容多的单元格完成换行操作 首先在main.tex引入makecell包 \usepackage{makecell} 然后回到表格找到你想换行的单元格&#xff0c;把\makecell{}加进去&#xff0c;然后在需要换行的…

基于物联网技术的基站能耗监控解决方案-安科瑞 蒋静

摘 要&#xff1a;随着社会的不断发展和进步&#xff0c;人们对通信基站的需求增加。随着通信基站大规模的建设和使用&#xff0c;基站内部的电源情况、供电安全保障或节能减排等问题&#xff0c;仍然是基站建设的着重问题。不管是建设者还是使用者&#xff0c;都应当注重用电安…

英语 - 单词

目录 餐饮用具 烹饪 餐饮用具 表示容器的词汇&#xff1a; a bottle, a can, a mug 表示餐具的词汇&#xff1a; a fork, a spoon &#xff0c;a knife, chopsticks , a plate, a bowl 表示饮食的词汇&#xff1a; alcohol&#xff0c;fast food, takeout, drive-through brin…

[socket 弹 shell] msg_box3

前言 题目比较简单&#xff0c;没开 Canary 和 NX. Arch: amd64-64-littleRELRO: Full RELROStack: Canary foundNX: NX disabledPIE: PIE enabledRWX: Has RWX segments 漏洞利用与分析&#xff1a; 白给的函数调用&#xff0c;其中 ptr 10 是用…

Long-Context下LLM模型架构全面介绍

深度学习自然语言处理 原创作者&#xff1a;cola 随着ChatGPT的快速发展&#xff0c;基于Transformer的大型语言模型(LLM)为人工通用智能(AGI)铺平了一条革命性的道路&#xff0c;并已应用于知识库、人机界面和动态代理等不同领域。然而&#xff0c;存在一个普遍的限制:当前许多…

模拟业务流程+构造各种测试数据,一文带你测试效率提升80%

我们做软件测试的时候&#xff0c;经常需要页面有点数据&#xff0c;特别是涉及到一些数据统计的测试用例的时候&#xff0c;更是需要源源不断的测试数据让前端页面生成对应的报表测试统计的数据正确性。 如果我们通过手工的方式操作业务流程来实现数据的构造的话&#xff0c;少…

【Cisco Packet Tracer】子网划分的计算及实验

子网划分&#xff1a;Internet组织机构定义了五种IP地址&#xff0c;有A、B、C三类地址。A类网络有126个&#xff0c;每个A类网络可能有16777214台主机&#xff0c;它们处于同一广播域。而在同一广播域中有这么多节点是不可能的&#xff0c;网络会因为广播通信而饱和&#xff0…

在 ArcGIS 软件中添加左斜宋体(东体)的方法与步骤

河流水系在作图时一般设置为左斜宋体&#xff08;东体&#xff09;、蓝色&#xff0c;比如黄河、青海湖等&#xff0c;如下图所示&#xff1a; 标准地图水系注记 下面讲解如何在 ArcGIS 软件中添加左斜宋体&#xff08;东体&#xff09;&#xff0c;首先需要下载左斜宋体&#…

【开源】基于JAVA语言的校园疫情防控管理系统

项目编号&#xff1a; S 037 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S037&#xff0c;文末获取源码。} 项目编号&#xff1a;S037&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学生2.2 老师2.3 学校管理部门 三、…

《管家婆》辉煌2005+(V4.0)简单教程

《管家婆》辉煌2005&#xff08;V4.0&#xff09;简单教程 呉師傅 运行环境&#xff1a;   操作系统推荐使用Win2000&#xff08;32位&#xff09;、WinXP&#xff08;32位&#xff09;、Win7&#xff08;位&#xff09; 兼容&#xff1a;Win7&#xff08;64位&#xff09…

MySQL的数学函数

在MySQL中&#xff0c;有许多内置的数学函数可以帮助我们进行各种复杂的数学计算。这些函数包括round、ceil、floor、truncate、mod和pow等。下面&#xff0c;我将详细介绍这些函数的用法。 1.round(x,保留位数) round(x,保留位数)函数&#xff1a;用于将数字x四舍五入到指定…

阿里云MySQL从 2003->1251->1396

目的 由于需要在阿里云的实例中装MySQL数据库&#xff0c;安装前期&#xff08;本地访问&#xff09;还是挺顺利的&#xff0c;但是到了远程连接的时候&#xff0c;却出现了一系列的Bug&#xff0c;以为是没有 实名认证没有备案 的原因导致的&#xff0c;但是后来…

vue中中的动画组件使用及如何在vue中使用animate.css

“< Transition >” 是一个内置组件&#xff0c;这意味着它在任意别的组件中都可以被使用&#xff0c;无需注册。它可以将进入和离开动画应用到通过默认插槽传递给它的元素或组件上。进入或离开可以由以下的条件之一触发&#xff1a; 由 v-if 所触发的切换由 v-show 所触…

Kubernetes中PostgreSQL的推荐方法

1*HDp3_wvu78Vaa-4C9NFHaQ.gif 你是否曾听说过避免在Kubernetes中运行数据库的建议&#xff1f;有人认为Kubernetes不适合有状态的应用程序&#xff0c;但这些说法是否属实&#xff1f;让我们深入探讨并挑战这些说法。 Kubernetes&#xff1a;有关有状态工作负载的误解平台 在涉…

http请求签名生成算法

算法文档&#xff1a; 签名生成算法 签名生成步骤 步骤1、请求参数拼接为有序字符串 步骤2、将签名字符串使用MD5摘要算法生成MD5值 步骤3、将生成的签名追加到原参数后 lua实现 local md5 require("md5") -- 使用 Lua 的 md5 库&#xff0c;你可能需要安装相应的库…

Zabbix 6.0部署+自定义监控项+自动发现与自动注册+部署zabbix代理服务器

Zabbix 6.0 Zabbix 6.0一、关于zabbix1、什么是zabbix2、zabbix工作原理3、zabbix 6.0 特性4、zabbix 6.0 功能组件 二、Zabbix 6.0 部署1、 部署 zabbix 服务端(1) 部署 Nginx PHP 环境并测试(2) 部署数据库(3) 编译安装 zabbix server 服务端(4) 部署 Web 前端&#xff0c;进…