编程笔记 html5cssjs 065 JavaScrip数据类型

2024-01-29 13:52

本文主要是介绍编程笔记 html5cssjs 065 JavaScrip数据类型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

编程笔记 html5&css&js 065 JavaScrip数据类型

  • 一、JavaScript 数据类型
  • 二、JavaScrip 数据类型分类:
  • 三、JavaScript 数据类型与其他语言的主要区别
  • 小结

数据类型是编程语言的基本构成,不同的编程语言的数据类型有很大区别。数据是程序的处理对象,所以,数据类型的知识要熟练掌握才行。

一、JavaScript 数据类型

  1. Number(数值型):

    • JavaScript 中的数字可以是整数或浮点数。
    • 示例:
      let age = 25; // 整数
      let pi = 3.14159; // 浮点数
      let e = Number.EPSILON; // 极小的正数,表示浮点数精度范围
      let infinity = Infinity; // 正无穷大
      let nan = NaN; // 非数字(Not a Number),用于表示计算结果无法表示为数字时的结果
      
  2. String(字符串型):

    • 字符串是由零个或多个字符组成的有序序列,用单引号 ' 或双引号 " 包围。
    • 示例:
      let name = 'Aniu'; // 单引号定义字符串
      let greeting = "Hello, World!"; // 双引号定义字符串
      let multiLineStr = `This is a multi-line string`; // ES6 中的模板字面量(Template literal)
      
  3. Boolean(布尔型):

    • 表示逻辑值,仅有两个可能的取值:truefalse
    • 示例:
      let isStudent = true;
      let hasPassed = false;
      
  4. Undefined(未定义型):

    • 当变量声明但未初始化时,其值默认为 undefined
    • 示例:
      let age;
      console.log(age); // 输出: undefined
      
  5. Null(空对象型):

    • null 是一个特殊的值,表示“无”或者“空对象引用”,它与 undefined 类似但不完全相同,在某些情况下用于显式地表示空值或没有对象值的情况。
    • 示例:
      let obj = null; // 显示对象为空
      
  6. Symbol(符号型):

    • 自从 ECMAScript 6 (ES6) 引入以来,Symbol 是一种原始数据类型,每个 Symbol 值都是唯一的,不可变的,并且不能与其他类型的值进行比较。
    • 示例:
      let sym = Symbol("description"); // 创建一个symbol值
      
  7. BigInt(大整数型):

    • BigInt 是从 ECMAScript 2020 开始支持的数据类型,用于表示超过 Number 类型安全整数范围(-2^53 to 2^53 - 1)的大整数。
    • 示例:
      let largeNum = 123456789012345678901234567890n; // 后缀n表示BigInt类型
      
  8. Object(对象型):

    • 虽然不是基本数据类型,但它是 JavaScript 中的一个重要类型。所有非原始值都是对象,包括数组、函数、日期等。
    • 示例:
      let person = { // 对象字面量name: "Aniu",age: 25,sayHello: function() {console.log(`Hi, I'm ${this.name}`);}
      };
      

以上就是 JavaScript 的八种数据类型,前六种是基本数据类型(原始值),后两种(ObjectFunction,此处未提及 Function,但其实也是对象的一种)属于复杂数据类型(引用类型)。

二、JavaScrip 数据类型分类:

原始值(Primitive values)和引用值(Reference values)。

  1. 原始数据类型(Primitive data types)
    原始数据类型是不可变的,它们直接包含值本身而不是对象的引用。共有六种原始数据类型:
    Undefined: 当变量被声明但未赋值时,其值为 undefined。
    Null: 类型只有一个值 null,它表示一个空或者无指向的对象引用。
    Boolean: 有两种可能的值 true 和 false,用于逻辑判断。
    Number: 表示整数或浮点数,包括正负Infinity和NaN(非数字)。
    String: 由零个或多个16位Unicode字符组成的文本序列,用单引号 ’ 或双引号 " 括起来。
    BigInt: ECMAScript 2020 引入的新类型,用来表示大于Number.MAX_SAFE_INTEGER的整数,使用 n 后缀表示,例如 9007199254740991n。

  2. 复杂数据类型 / 对象数据类型(Object data type)
    Object: 这是一种复杂的数据类型,可以存储任意类型的键值对集合,包括函数、数组和其他对象。所有非原始类型的值都是对象,比如:
    Array: 有序的元素列表,可以通过索引访问元素,如 var arr = [1, ‘two’, true]。
    Function: 函数是可执行的对象,可以看作是一段代码的封装。
    Date: 表示日期和时间的值。
    RegExp: 正则表达式对象,用于文本匹配和搜索操作。
    Map、Set、WeakMap、WeakSet: 集合数据结构。
    Symbol: ECMAScript 6 引入的一种新的原始数据类型,用于创建唯一的标识符。
    typeof 操作符
    typeof 是一个一元操作符,它可以返回变量或表达式的类型。对于以上提到的原始类型(除 null 外),typeof 返回的是正确的类型字符串;而对于 null,typeof null 返回的是 “object”,这是一个历史遗留的bug而非预期行为;对于对象类型,typeof 会返回 “object”,但对于具体的不同对象类型(如函数、数组等),需要使用更精确的方法来检测,如 Array.isArray() 或 instanceof 操作符。
    数据复制与比较
    原始类型在复制时是值复制,即两个变量如果具有相同的原始值,则被认为是相等的。而对象类型(包括数组、函数等)复制时是引用复制,意味着复制得到的新变量只是指向同一个内存地址,修改其中一个变量会影响到另一个变量的值。当比较两个对象类型变量时,即使内容相同,只要不是同一块内存空间,它们之间也会被视为不相等。若要比较对象内容是否相等,通常需要自行实现深度比较方法或使用lodash等库提供的工具函数。

三、JavaScript 数据类型与其他语言的主要区别

  1. 动态类型

    • JavaScript 是一种动态类型语言,这意味着变量在声明时无需指定其数据类型,而且可以在运行时更改其值的数据类型。
    • 相比之下,像 Java、C++、C# 等静态类型语言要求在编译阶段就需要明确变量的类型,并且在程序执行过程中不能改变。
  2. 弱类型

    • JavaScript 具有弱类型的特点,允许不同类型的数据之间进行隐式转换(如字符串和数字相加时,JavaScript 会尝试将字符串转换为数字)。
    • 强类型语言如 C 语言则不会自动进行这种类型的隐式转换,如果不同类型间操作未显式转换,编译器通常会报错。
  3. Object 类型特殊性

    • 在 JavaScript 中,对象是一种复杂数据类型,它可以容纳任何类型的键值对,而且可以动态添加或删除属性。
    • 许多其他语言中也有对象类型,但它们可能更接近于结构体或类实例,具有固定的成员列表。
  4. 函数作为一等公民

    • JavaScript 函数可以被赋值给变量、作为参数传递给其他函数以及作为函数返回值,这被称为“一等函数”或“第一类函数”。
    • 虽然一些现代语言也支持此特性(例如 Python 和 Scala),但在早期很多语言如 C 语言中函数并不具备这样的灵活性。
  5. 数组和数据结构

    • JavaScript 数组是动态大小的,并且可以包含不同类型的元素,这是与许多静态类型语言(如 C 语言数组)的不同之处。
    • 另外,JavaScript 还提供了灵活的对象字面量和 Map、Set 等集合数据结构。
  6. 特殊的 nullundefined 类型

    • JavaScript 有 nullundefined 两种表示空值或未定义状态的类型,而许多其他语言可能只有一种方式来表达类似的概念。
  7. typeof 操作符的行为

    • JavaScript 的 typeof 操作符可以用来检测变量的类型,但它返回的结果有些特例,比如 typeof null 返回 "object",这是 JavaScript 中的一个历史遗留问题。
  8. 新增数据类型

    • 随着 ECMAScript 标准的演进,JavaScript 添加了新的数据类型,比如 ES6 中引入的 Symbol 类型,以及 ES2020 中的 BigInt 类型,这些在传统的 C 家族语言或其他一些较早的语言中是没有的。

小结

光有数据类型,很多事还不能做,很多知识都是这样,前后交错的,学习时通过示例掌握涉及到的内容,不限于本节主题。

这篇关于编程笔记 html5cssjs 065 JavaScrip数据类型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/657135

相关文章

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Java进程异常故障定位及排查过程

《Java进程异常故障定位及排查过程》:本文主要介绍Java进程异常故障定位及排查过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、故障发现与初步判断1. 监控系统告警2. 日志初步分析二、核心排查工具与步骤1. 进程状态检查2. CPU 飙升问题3. 内存

java中新生代和老生代的关系说明

《java中新生代和老生代的关系说明》:本文主要介绍java中新生代和老生代的关系说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、内存区域划分新生代老年代二、对象生命周期与晋升流程三、新生代与老年代的协作机制1. 跨代引用处理2. 动态年龄判定3. 空间分

Java设计模式---迭代器模式(Iterator)解读

《Java设计模式---迭代器模式(Iterator)解读》:本文主要介绍Java设计模式---迭代器模式(Iterator),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录1、迭代器(Iterator)1.1、结构1.2、常用方法1.3、本质1、解耦集合与遍历逻辑2、统一

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

深度解析Java DTO(最新推荐)

《深度解析JavaDTO(最新推荐)》DTO(DataTransferObject)是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式,其核心目的是封装数据,... 目录一、什么是DTO?DTO的核心特点:二、为什么需要DTO?(对比Entity)三、实际应用场景解析

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1