揭开JavaScript数据类型的神秘面纱

news2024/9/19 10:39:32

🧑‍🎓 个人主页:《爱蹦跶的大A阿》

🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》

​ 

✨ 前言

        JavaScript作为一门动态类型语言,其数据类型一直是开发者们关注的话题。本文将深入探讨JavaScript中的数据类型,揭开这块神秘的面纱。

JavaScript中主要有以下几种数据类型:

  1. 基本类型(Primitive Types):包括Undefined、Null、Boolean、Number、String、Symbol这6种原始类型。
  2. 引用类型(Reference Types):包括Object、Array、Function等引用类型。

        这些不同类型的数据在存储方式、传参方式上都有区别,合理运用不同的数据类型可以编写出更优雅的代码。例如基本类型传递的是值,引用类型传递的是地址。

        本文将详细介绍各数据类型的特征、使用场景和注意事项,帮助读者深入理解JavaScript中的数据类型,避免在开发中出现问题。

通过本文,读者可以学习到:

  • 每种数据类型的定义及基本特征
  • 不同数据类型的内存分配方式
  • 基本类型和引用类型的区别
  • 数据类型转换的规则
  • 如何正确判断数据类型
  • 每种数据类型的常见错误及解决方法

准备好了吗,让我们开始探索JavaScript这片神秘的数据类型之地吧!

Undefined

  • 定义:是一个表示"无"的值。
  • 特征:只有一个值undefined,类型转换为字符串会变成"undefined"。
let x; //变量声明但未初始化,默认为undefined
let y = undefined; //直接赋值为undefined

console.log(x); //undefined
console.log(y); //undefined
console.log(typeof x); //"undefined"

让我再详细解读一下Undefined类型: 

  • Undefined类型只有一个值,即undefined。
  • 当声明一个变量但未对其进行初始化时,该变量的值就是undefined。
    let x;
    console.log(x); // undefined
  • 定义一个函数时,如果不设置返回值,则该函数的默认返回值是undefined。
    function f() {
      // no return statement 
    }
    
    let x = f(); // x is undefined
  • 对一个未初始化的对象访问不存在的属性时,也会返回undefined。
    let obj = {};
    console.log(obj.name); // undefined
  • void操作符会使任何表达式返回undefined。
    let x = void(0); // x is undefined
  • 函数参数未传入时,该参数等于undefined。
    function f(x) {
      console.log(x); // undefined
    }
    
    f();
  • 任何数据类型与undefined进行运算时,结果都为NaN。
    undefined + 1 // NaN
    undefined - 1 // NaN

         综上所述,Undefined类型表示"无"的值,在变量未初始化、函数没有返回值等场景下会返回undefined。需要注意undefined与null的区别,null表示空值,需要手动设置,而undefined由系统自动初始化。

NULL

  • 定义:表示一个空值。
  • 特征:只有一个值null,类型转换为字符串会变成"null"。
let x = null;

console.log(x); //null
console.log(typeof x); //"object"

让我来详细解读一下Null类型:

  • Null类型只有一个值,即null。它代表空值。
  • null需要由开发者手动设置,表示一个空对象引用。
    let x = null;

  • 和undefined不同,null是一个有意义的空值,而undefined是一个未定义的值。
  • 当想表示一个变量将来用于保存对象,还不知道会保存哪个对象时,可以将该变量初始化为null。
    let obj = null; // 后面会给obj赋值为对象
  • null的类型为object,这是JS存在的怪癖之一。
    typeof null // "object"
  • null通常用来表示不存在的对象,作为函数的参数表示对象不合法。
    function setName(obj) {
      obj.name = "Jack"; 
    }
    
    setName(null); // obj不合法,会报错
  • null与undefined的相等运算结果为true。
    null == undefined // true

        总之,null是一个特殊的空值,需要开发者手动设置,主要用于表示不存在的对象引用,与undefined的区别需要牢记。

 Boolean

  • 定义:表示逻辑上的真或假的值。
  • 特征:只有true和false两个值。
let x = true;
let y = false;

let a = Boolean(1); //true
let b = Boolean(0); //false

关于Boolean类型,让我详细解读如下:

  • Boolean表示逻辑上的值true和false。
  • 它有两个字面值:true和false。
  • 布尔值常用于逻辑表达式和流程控制。
    let a = true;
    let b = false;
    
    if (a) {
      // 执行代码
    }
  • 调用Boolean函数可以将其他类型的值转换为布尔值。
    Boolean(1); // true
    Boolean(0); // false
    Boolean("hello"); // true
    Boolean(""); // false
  • 以下值转换为false:0、NaN、null、undefined、空字符串。其他值都转换为true。
  • 逻辑运算符如&&、||、!可以对布尔值进行运算。
    true && false // false
    true || false // true 
    !true // false
  • 条件表达式会隐式进行布尔转换。
    if (score) { } // score不为0都会执行
  • Boolean是基于二进制的,但JS不支持Bit运算。

        Boolean有true和false两个值,用于逻辑判断和流程控制。可以用Boolean函数将其他类型转换为布尔值,并支持逻辑运算。正确使用布尔类型可以使代码更简洁。

Number

  • 定义:用于表示数值,如整数和浮点数。
  • 特征:支持各种运算,可以表示正数、负数、0。
let x = 3; 
let y = 3.14;

let a = x + y;

让我来详细解读下JavaScript中的Number类型:

        Number类型可以表示整数和浮点数,但有精度限制。支持各种运算方法,但也有最大和最小表示范围。需要注意其中特殊值的含义。

String

let s = 'hello';
let s2 = "world"; 

let s3 = s + ' ' + s2; //连接
console.log(s3[0]); //访问单个字符

让我来详细解读下JavaScript中的String类型:

        String用于文本数据,可以拼接、查找子串、大小写转换等,模板字符串提供高级语法。需要注意String是不可变的。

Symbol

let x = Symbol('demo');
let y = Symbol('demo'); 

console.log(x === y); //false,值唯一

让我来详细解读下JavaScript中新增的Symbol类型:

        Symbol可以创建唯一的值,不会发生冲突,用于解决命名问题,也可以用于定义对象的属性名。但不能进行运算,需要转成字符串才能输出。

 

✨ 结语   

        JavaScript作为一门动态类型语言,其丰富的数据类型是其极大优势之一。通过本文的详细介绍,相信大家对各种数据类型已经有了更深入的了解。

        我们重点探讨了六种基本数据类型的定义、特征、使用场景和注意事项,并辅以大量代码实例加深理解。此外,我们还对基本类型和引用类型的区别进行了概述。

        数据类型的运用贯穿整个JavaScript程序开发。合理选择和使用数据类型,对编写简洁优雅的代码 big必须。同时,深入理解数据类型也是避免潜在问题的重要一步。

        本文内容仅是JavaScript数据类型这个宏大主题的一瞥。如果大家对某些数据类型还有疑问,欢迎在评论区留言讨论。我们会持续关注数据类型相关的新特性,并带来更多高质量的内容。

        再次感谢大家的阅读!希望本文可以成为你JavaScript数据类型学习的知识体系指南。让我们继续探索JavaScript的世界,发现更多精彩。

  • Number用于表示数字,包括整数和浮点数。
  • JavaScript不区分整数和浮点数,都使用Number类型。
    let a = 123; //整数
    let b = 3.14; //浮点数 
    
    typeof a; //"number"
    typeof b; //"number"
  • Number类型使用IEEE 754标准表示,可以表示正数、负数和0。
  • 但Number类型的整数精度有限,大于2^53-1的整数无法精确表示。
    Math.pow(2, 53); //精确的值
    Math.pow(2, 53) + 1; //无法精确表示,会舍入

  • Number提供各种运算方法,如isNaN(), toFixed(), toPrecision()等。
  • Number可以表示的最大值约为1.79e+308,最小值约为-1.79e+308。超出此范围无法表示。
    • 特殊的Number值:
      • Infinity代表无穷大
      • -Infinity代表无穷小
      • NaN代表非数值
    • Number可以通过parseInt(), parseFloat()进行转换。
    • 定义:用于表示文本类型的数据。
    • 特征:用单引号或双引号包裹起来,支持连接、访问单个字符等。
    • String用于表示文本的数据,需要使用单引号或双引号包裹。
      let s = 'hello';
      let s2 = "world";
    • 可以使用+进行字符串拼接。
      let s3 = s + ' ' + s2; // "hello world"
    • 可以通过索引访问字符串中的单个字符。
      let s = 'hello';
      s[0]; // 'h'
    • 常用的字符串方法:
      • length属性
      • indexOf()/lastIndexOf()
      • slice()/substring()/substr()
      • toUpperCase()/toLowerCase()
      • split()/join()
    • 可以使用\进行转义,像\n、\t等。
    • 模板字符串使用反引号,可以内嵌表达式。
      let n = 123;
      `${n} is a number`; // "123 is a number"
    • String是不可变的(immutable),方法不会改变原字符串。
    • 定义:一种唯一且不可变的数据类型,可以作为对象属性的标识符。
    • 特征:每次调用会返回一个唯一的值。
    • Symbol是ES6中新增的一种基本数据类型。
    • Symbol的值是唯一的,每个从Symbol()返回的值都不相等。
      let s1 = Symbol('foo');
      let s2 = Symbol('foo');
      
      s1 === s2; // false
    • Symbol主要用于解决命名冲突问题。
    • 可以给Symbol附加一个描述,便于调试。
      let s1 = Symbol('foo');
    • Symbol不能与其他类型的值进行运算。
      let sym = Symbol('a');
      sym + 'x'; // TypeError
    • Symbol可以显式转为字符串或者Boolean值。
      let sym = Symbol('a');
      String(sym); // "Symbol(a)"  
      Boolean(sym); // true
    • Symbol值可以作为对象属性的标识符,该属性是公有属性而非私有属性。
      let sym = Symbol('a');
      let obj = {
        [sym]: function() {} 
      };

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

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

相关文章

C语言算法(二分查找、文件读写)

二分查找 前提条件&#xff1a;数据有序&#xff0c;随机访问 #include <stdio.h>int binary_search(int arr[],int n,int key);int main(void) {}int search(int arr[],int left,int right,int key) {//边界条件if(left > right) return -1;//int mid (left righ…

MidTool的AIGC与NFT的结合-艺术创作和版权保护的革新

在数字艺术和区块链技术的交汇点上&#xff0c;NFT&#xff08;非同质化代币&#xff09;正以其独特的方式重塑艺术品的收藏与交易。将MidTool&#xff08;https://www.aimidtool.com/&#xff09;的AIGC&#xff08;人工智能生成内容&#xff09;创作的图片转为NFT&#xff0c…

数据库基础知识1

目录 数据库的使用 登录mysql 命令语法 常用命令 ​编辑 navicat建立连接 mysql授权管理命令 ​编辑mysql权限 数据导入导出 实例 数据导出 未登录 已经登录 导出导入的代码对比 ​编辑 导入导出的一个坑 python的导入导出 数据库基础知识 特点 需要掌握的程…

嵌入式——循环队列

循环队列 (Circular Queue) 是一种数据结构(或称环形队列、圆形队列)。它类似于普通队列,但是在循环队列中,当队列尾部到达数组的末尾时,它会从数组的开头重新开始。这种数据结构通常用于需要固定大小的队列,例如计算机内存中的缓冲区。循环队列可以通过数组或链表实现,…

使用Docker-compose快速构建Nacos服务

在微服务架构中&#xff0c;服务的注册与发现扮演着至关重要的角色。Nacos&#xff08;Naming and Configuration Service&#xff09;是阿里巴巴开源的服务注册与发现组件&#xff0c;致力于支持动态配置管理和服务发现。最近&#xff0c;一位朋友表达了对搭建一套Nacos开发环…

速卖通店铺销量飙升:掌握自养号测评(补单),轻松提升销售量

很多卖家在经营速卖通店铺时&#xff0c;都希望能提高自己店铺的曝光率。但对于一些新手卖家来说&#xff0c;可能不太清楚曝光率的具体含义以及如何提升。那么&#xff0c;让我们一起来探讨一下这个问题。 曝光率&#xff0c;简而言之&#xff0c;是指您的店铺和产品展示给顾…

springboot git配置文件自动刷新失败问题排查

http://{ip}:{port}/refresh 说明&#xff1a;springBoot版本是1.5.9&#xff0c;接口路径与2.x&#xff0c;不同 路径区别&#xff1a;/refresh VS /actuator/refresh 用postman调用refresh接口刷新git配置&#xff0c;报错如下&#xff0c;没有权限 在服务本地启动&#…

【Java】2023年业务实践中遇到的所有OOM情况及实战总结

OOM分析&实战 引言&#xff1a;一、JVM内存结构二、JVM OOM错误情况三、实践案例一案例二案例三 四、总结五、分析工具推荐六、参考文献 引言&#xff1a; 在Java开发中&#xff0c;随着应用程序变得越来越复杂&#xff0c;内存管理问题也变得愈加重要。而在JVM中的"O…

笔试案例2

文章目录 1、笔试案例22、思维导图 1、笔试案例2 09&#xff09;查询学过「张三」老师授课的同学的信息 selects.*,c.cname,t.tname,sc.score from t_mysql_teacher t, t_mysql_course c, t_mysql_student s, t_mysql_score sc where t.tidc.cid and c.cidsc.cid and sc.sids…

数据结构-测试6

一、判断题 1.若一个栈的输入序列为{1, 2, 3, 4, 5}&#xff0c;则不可能得到{3, 4, 1, 2, 5}这样的出栈序列。&#xff08;T&#xff09; 3比4先进&#xff0c;所以3比4后出&#xff0c;所以不可能得到 2. 在二叉排序树中&#xff0c;每个结点的关键字都比左孩子关键字大&…

【Qt开发】PyQt6--标签控件

标签控件 Qlabel设置标签文本文本的对齐方式为标签设置超链接为标签设置图片获取标签文本 Qlabel QLabel标签控件&#xff0c;用于显示用户不能编辑的文本&#xff0c;主要起提示的作用 设置标签文本 文本的对齐方式 通过这可以设置文本对齐方式 为标签设置超链接 勾选以上…

NGS基因测序(panel)报告解读数据库汇总

今天我们来梳理一下肿瘤基因报告解读常见的数据库&#xff0c;大家有机会可以自己查询并且解读&#xff0c;涉及到的数据库有dbSNP数据库 、gnomAD数据库、ExAC数据库、1000 Genomes、HGMD 数据库、OMIM数据库、ClinVar数据库、InterVar数据库 、ClinGen数据库、GeneReviews数据…

大创项目推荐 深度学习图像风格迁移

文章目录 0 前言1 VGG网络2 风格迁移3 内容损失4 风格损失5 主代码实现6 迁移模型实现7 效果展示8 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习图像风格迁移 - opencv python 该项目较为新颖&#xff0c;适合作为竞赛课题…

自学编程资源收集

Java&#xff0c;Python&#xff0c;C&#xff0c;JavaScript,SpringBoot&#xff0c;Vue,MySql等各种编程资料收集 mksz712-系统玩转OpenGLAI&#xff0c;实现各种酷炫视频特效mksz709-从0到1训练私有大模型 &#xff0c;企业急迫需求&#xff0c;抢占市场先机~8mksz702-Chat…

布偶猫必囤主食冻干有哪些?三款K9、sc、希喂主食冻干深度测评!

喂养布偶猫的小诀窍&#xff1a;既要满足其食肉习性&#xff0c;又需关注其敏感肠胃。主食冻干是理想选择&#xff0c;它既符合猫咪天然的饮食结构&#xff0c;又采用新鲜生肉为原料。搭配其他营养元素&#xff0c;既美味又营养&#xff0c;还能增强抵抗力。我们将为您测评市场…

IPv6路由协议---IPv6动态路由(RIPng)

IPv6动态路由协议 动态路由协议有自己的路由算法,能够自动适应网络拓扑的变化,适用于具有一定数量三层设备的网络。缺点是配置对用户要求比较高,对系统的要求高于静态路由,并将占用一定的网络资源和系统资源。 路由表和FIB表 路由器转发数据包的关键是路由表和FIB表,每…

如何写一篇专利?格式与要求

如何写一篇专利&#xff1f;格式与要求 知识产权专利类型发明实用新型外观设计 专利的审查专利授权的标准新颖性创造性实用性 不授予专利的情形 专利的挖掘专利五书权力要求书说明书技术领域背景技术发明内容附图说明具体实施方式 说明书附图说明书摘要摘要附图 知识产权 市场…

流量控制在计算机网络中的应用

计算机网络是我们现代社会中必不可少的一部分&#xff0c;其在信息传输和分享方面起到了至关重要的作用。然而&#xff0c;面对大量的数据流量和用户请求&#xff0c;网络必须进行流量控制&#xff0c;以保证网络的稳定性和性能。本文将探讨流量控制在计算机网络中的应用。 流…

本地部署Canal笔记-实现MySQL与ElasticSearch7数据同步

背景 本地搭建canal实现mysql数据到es的简单的数据同步&#xff0c;仅供学习参考 建议首先熟悉一下canal同步方式&#xff1a;https://github.com/alibaba/canal/wiki 前提条件 本地搭建MySQL数据库本地搭建ElasticSearch本地搭建canal-server本地搭建canal-adapter 操作步骤…

设计模式④ :分开考虑

一、前言 有时候不想动脑子&#xff0c;就懒得看源码又不像浪费时间所以会看看书&#xff0c;但是又记不住&#xff0c;所以决定开始写"抄书"系列。本系列大部分内容都是来源于《 图解设计模式》&#xff08;【日】结城浩 著&#xff09;。该系列文章可随意转载。 …