JavaScript有哪些数据类型?如何判断一个变量的数据类型?

文章目录

  • JavaScript有哪些数据类型?如何判断一个变量的数据类型?
  • 1.JavaScript 的原生值 (primitive values)
    • 1.1 字符串 String
    • 1.2 布尔值 Boolean
    • 1.3 Number
    • 1.4 BigInt
    • 1.5 Undefined
    • 1.6 Null
    • 1.7 Symbol
  • 2.JavaScript中的对象(objects)
  • 3. 如何辨别一个变量的数据类型?
    • 3.1 使用typeof判断变量的数据类型
    • 3.2 判断变量是对象还是数组?

JavaScript有哪些数据类型?如何判断一个变量的数据类型?

JavaScript 有其内建的数据类型。其中又分为原生值(primitive values)和对象(objects)。

1.JavaScript 的原生值 (primitive values)

截至目前,JavaScript 的资料型别中,有七个原生值。这七个原生值以外的,全都是属于对象。

原生值是不可变的(immutable),意思是我们不能改变那个值本身。比如当我们“修改”原始值时,实际上是让变量重新绑定到一个新的值,而不是在原值上进行修改。

letgreeting="Hi";greeting="Hello";// 此时虽然打印 greeting 是 Hello,但是 Hi 这个值本身是没变的,只是 greeting 指向了Hello 这个新值

JavaScript 的型别中的七个原生值包含:

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

1.1 字符串 String

String (字符串)

字串是最常见的原生值之一。如前面提到,在JavaScript 当中字串本身是不可变的。当我们用substring()来撷取字串,或用concat()来把两个字串合为一,这些都是会回传另一个字串,而非改变原本的字串。

1.2 布尔值 Boolean

Boolean (布尔值)

truefalse两个值的布林值,也是JavaScript 的原生值。

1.3 Number

JavaScript 与一些语言不同,没有分整数与浮点数,而是都用number这个原生值。不论整数或浮点数,都是number这个型别。在JavaScript 当中,+Infinity,-Infinity, 与 NaN 都是number这个型别,所以我们用typeof来检查的话,会得到number

console.log(typeofNaN);// number

number在JavaScript 是双精度浮点数,所以精确度是介于-(2^53 − 1)2^53 − 1之间。在这个范围之外,就会有精准度的问题,这时候要用另一个原生值BigInt

1.4 BigInt

上面提到在JavaScript 的整数与浮点数,都是用number这个型别,这其实只说了一半。因为JavaScript 的number精准度有其限制,虽然多数情况很够用(2^53 - 1会是9007199254740991,我们很少用到比这大的数)。但有些时候会需要更往下的精准度。这时就可以用BigInt数值的型别。

BigInt可以让我们任意选择其精准度,就可以避免一些number会遇到的问题。它跟number一样可以用+,*,-,**, 与%等运算子,不过要注意不可以拿BigIntnumber型别的值交互使用,这会出现TypeError

1.5 Undefined

undefined是一个类型,它本身也是一个值。

  • 假如某个变量未声明就是用,会出现索引错误ReferenceError

    console.log(a);ReferenceError:a is not defined
  • 用 let / const 声明了,但在声明前使用

    console.log(a);leta=1;ReferenceError:Cannot access'a'before initialization
  • 某个变量声明但是没有赋值

    letgreeting;console.log(greeting);// undefined

1.6 Null

null是很容易跟undefined搞混的原生值。undefined是因为某变数还没有赋值,所以对JavaScript 来说,它不知道该变数的值是什么,所以要读取该变数时,会是undefined。不过 则null是我们赋予某个变数null这一个值。

1.7 Symbol

最后一个JavaScript 原生值是Symbol,它是一个独特(unique) 值,多半会搭配物件一起使用,作为物件的键(key)。

constsym=Symbol("ExplainYYDS");constobj={[sym]:"Interview Preps for Software Engineers"};obj[sym];// Interview Preps for Software Engineers

2.JavaScript中的对象(objects)

除了上述的七个原生值以外的存在,在JavaScript 当中都是对象。

JavaScript 圈有一个梗,数组是对象,函数是对象,对象是对象。

3. 如何辨别一个变量的数据类型?

3.1 使用typeof判断变量的数据类型

要辨别一个变数的数据类型,最常见的方式是透过typeof这个方法。举例来说typeof判断字符串。

letgreeting="hi";console.log(typeofgreeting);// 'string'

typeof 的两个注意点

  • typeof 原生值,返回的是该原生值的类型标识字符串,但是 typeof null 结果不是 null,而是object,这个历史遗留的 bug,修复成本太高了
  • typeof 数组的结果是 object ,tpyeof 函数的结果是 function
console.log(typeofnull);// objectconsole.log(typeof[]);// objectconsole.log(typeoffunction(){});// function

补充typeof结果的表格

Type of valResult
Undefined“undefined”
Null“object”
Boolean“boolean”
Number“number”
String“string”
Object (native and does not implement [[Call]])“object”
Object (native or host and does implement [[Call]])“function”
Object (host and does not implement [[Call]])Implementation-defined except may not be “undefined”, “boolean”, “number”, or “string”.

因为 typeof 无法判断数组和对象,所以需要新的方法去判断某个变量是对象还是数组。

3.2 判断变量是对象还是数组?

Array.isArray()是可以协助我们的方法。如果是数组,会回传true;但若是一般对象,则会回传false。举例来说:

Array.isArray([1,2,3]);// trueArray.isArray({foo:123});// false

我们也可以透过Object.prototype.toString()的方法帮助我们辨别数组、函数与一般对象。

constarr=[1,2,3];constfn=()=>{return123;};constobj={foo:123};console.log(Object.prototype.toString.call(arr));// [object Array]console.log(Object.prototype.toString.call(fn));// [object Function]console.log(Object.prototype.toString.call(obj));// [object Object]

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

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

相关文章

基于M2FP的智能运动损伤预防系统

基于M2FP的智能运动损伤预防系统 🧩 M2FP 多人人体解析服务:核心技术支撑 在构建智能运动损伤预防系统的进程中,精准、实时的人体姿态与结构理解是实现动作风险评估的关键前提。传统姿态估计算法多聚焦于关节点检测(如OpenPose&am…

M2FP模型API开发指南:快速构建服务接口

M2FP模型API开发指南:快速构建服务接口 📖 项目简介:M2FP 多人人体解析服务(WebUI API) 在计算机视觉领域,人体解析(Human Parsing) 是一项关键的细粒度语义分割任务,…

手把手教你部署M2FP:上传图片即得彩色分割图,无需深度学习基础

手把手教你部署M2FP:上传图片即得彩色分割图,无需深度学习基础 🌟 为什么选择M2FP?从“看不懂的模型”到“拖图出结果”的跨越 在计算机视觉领域,语义分割一直是极具挑战性的任务之一。尤其是在多人场景下对人体部位…

智慧校园项目招投标中标通知书发出流程与注意事项

✅作者简介:合肥自友科技 📌核心产品:智慧校园平台(包括教工管理、学工管理、教务管理、考务管理、后勤管理、德育管理、资产管理、公寓管理、实习管理、就业管理、离校管理、科研平台、档案管理、学生平台等26个子平台) 。公司所有人员均有多…

揭秘7款免费AI论文工具:润色+提原创,导师不会说的秘密

90%的学生还在为论文降重、润色、赶deadline熬夜爆肝,却不知道有些工具能让这个过程轻松90%。导师们或许用过,但绝不会在明面上告诉你。今天,我们就来揭开这层“学术信息差”的面纱。 你是否也曾面临这样的困境:对着空白的文档发呆…

智能镜子项目实战:集成M2FP实现穿衣效果实时分析

智能镜子项目实战:集成M2FP实现穿衣效果实时分析 在智能硬件与AI融合日益深入的今天,智能镜子正从概念走向落地。其核心能力之一——穿衣效果可视化分析,依赖于高精度的人体语义分割技术。如何让一面镜子“看懂”用户的着装,并对…

计算机毕设java网上订餐系统 基于Java的在线餐饮预订平台设计与实现 Java技术驱动的网络订餐系统开发

计算机毕设java网上订餐系统d0a769(配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着互联网技术的飞速发展,人们的生活方式发生了翻天覆地的变化。尤其是在疫情期间…

M2FP模型在影视后期中的人物分离技术

M2FP模型在影视后期中的人物分离技术 🎬 影视后期新范式:精准人物分离的工程挑战 在现代影视后期制作中,人物分离(Human Parsing) 已成为视觉特效、虚拟换装、背景替换等关键流程的核心前置步骤。传统抠像技术依赖绿幕…

Python使用DrissionPage上传文件:从基础到实战指南

在自动化测试和网页爬虫开发中,文件上传是一个常见需求。本文将详细介绍如何使用Python的DrissionPage库实现高效稳定的文件上传操作,涵盖基础原理、核心方法和实战案例。 一、DrissionPage上传文件的核心原理 DrissionPage是一个基于Selenium和Reques…

Nordic的nRF54L系列也推出单片机AI版nRF54LM20B,搭载Axon NPU的新型超低功耗无线SoC

https://www.nordicsemi.com/Nordic-news/2026/01/nRF54L-Series-SoC-with-NPU-and-Nordic-Edge-AI-Lab-make-on-device-intelligence-easily-accessible 搭载Axon NPU的新一代nRF54LM20B 2023年,Nordic收购了Atlazo及其Axon技术。nRF54LM20B SoC是nRF54L系列首款大…

深度学习入门:使用M2FP完成第一个分割项目

深度学习入门:使用M2FP完成第一个分割项目 📌 为什么选择M2FP作为你的语义分割起点? 对于刚接触深度学习的开发者而言,图像分割是一个既吸引人又充满挑战的任务。尤其是多人人体解析——在一张图中精准识别多个个体的身体部位&a…

openspec开放标准参考:M2FP符合可解释AI设计原则

openspec开放标准参考:M2FP符合可解释AI设计原则 🧩 M2FP 多人人体解析服务 (WebUI API) 项目背景与可解释AI的契合点 在人工智能系统日益深入视觉内容理解的今天,可解释性(Explainability) 成为衡量模型是否具备工程…

百度搜索关键词优化:M2FP人体解析相关词条排名上升

百度搜索关键词优化:M2FP人体解析相关词条排名上升 📌 从技术落地到流量增长:M2FP多人人体解析服务的SEO实践启示 在AI模型日益普及的今天,一个优秀的深度学习项目不仅要具备工程稳定性和功能完整性,还需在信息分发层面…

M2FP在低光照条件下表现如何?实测结果显示鲁棒性强

M2FP在低光照条件下表现如何?实测结果显示鲁棒性强 📖 项目简介:M2FP 多人人体解析服务 在计算机视觉领域,人体解析(Human Parsing) 是一项关键的细粒度语义分割任务,目标是将人体分解为多个语义…

为什么多人解析常出错?M2FP内置拼图算法让Mask合并更精准

为什么多人解析常出错?M2FP内置拼图算法让Mask合并更精准 🧩 M2FP 多人人体解析服务:从离散Mask到完整语义图的工程突破 在当前计算机视觉领域,多人人体解析(Multi-person Human Parsing) 是一项极具挑战性…

除尘系统设计(源码+万字报告+讲解)(支持资料、图片参考_相关定制)

除尘系统设计 摘 要:作为一种高效气固分离设备,旋风除尘器在工业除尘系统中的应用非常广泛,而随着环保要求越来越严格,提高除尘设备效率,降低能耗,降低运行阻力成为研究的重点,利用含尘气流在设…

Kafka和RabbitMQ相比有什么优势?

Kafka和RabbitMQ都是流行的消息中间件系统,他们各自都有一些优势和适用场景。以下是Kafka相对于RabbitMQ的一些比较明显的优势:分布式架构:Kafka是为大规模分布式流处理而设计的,具有高度可伸缩性。RabbitMQ虽然也支持分布式架构&…

成功案例|如何进行岗位价值评估?——华恒智信助力某国有数智化中心薪酬改革实例

【客户行业】 人工智能、大数据、国有企业、技术服务、研发中心、数智化转型、高科技行业【问题类型】 岗位价值评估、薪酬体系设计、绩效考核体系搭建、宽带薪酬设计、核心人才激励方案、国有企业薪酬激励方案、人力资源体系诊断与优化【客户背景】某国有数智化中心是行业领头…

Z-Image-Turbo特殊教育应用:自闭症儿童沟通图像生成工具

Z-Image-Turbo特殊教育应用:自闭症儿童沟通图像生成工具 引言:技术赋能特殊教育的创新实践 在特殊教育领域,非语言沟通障碍是自闭症谱系障碍(ASD)儿童面临的核心挑战之一。许多孩子具备丰富的内心世界,却因…

对比测试:M2FP在微pe官网风格页面中仍保持高解析稳定性

对比测试:M2FP在微pe官网风格页面中仍保持高解析稳定性 📌 引言:为何需要稳定的人体解析服务? 在当前AI视觉应用快速落地的背景下,多人人体解析(Human Parsing)已成为智能零售、虚拟试衣、安防…