重学JavaScript,推翻你的固有认知 —— 数据类型和数据结构

简介: 笔记

15.png

1. 什么叫动态类型


  • JavaScript 是一种弱类型或者说动态语言。
  • 我们不用提前声明变量的类型,在程序运行过程中,类型会被自动确定。
  • 这也意味着你可以使用同一个变量保存不同类型的数据
let a;     // 初始不给任何类型
a = 11;    // a此时是number类型
a = "二大爷"; // a 变成了字符串类型
a = true;  // a 变成了布尔类型

实际应用过程中并不推荐这样做,容易出现一些不可预知的错误

  • 比如你兄弟忽然变成了女的,又很漂亮(睡还是不睡?
  • 比如你闺蜜忽然变成了男的,很帅(上还是不上?
  • 比如隔壁老王变成了你老婆…(老王自己变成绿帽?)
  • 综上所述,数据类型一旦被确定,不要轻易篡改~~16.png


2. 数据类型



你可能仍然以为JavaScript只有 6 种数据类型(这就是固有认知)

最新的 ECMAScript 标准定义了 8 种数据类型:

2.1 原始类型(6 种原始类型,使用 typeof 运算符检查)


undefined:typeof instance === “undefined”

Boolean:typeof instance === “boolean”

Number:typeof instance === “number”

String:typeof instance === "string

BigInt:typeof instance === “bigint”(任意大的整数)

Symbol :typeof instance === “symbol”

2.2 null 与 Object


null: typeof instance === “object”

typeof instance === “object”。

任何 constructed 对象实例的特殊非数据结构类型,也用做数据结构:(new Object,new Array,new Map,new Set,new WeakMap,new WeakSet,new Date),和几乎所有通过 new 关键字创建的东西。

2.3 typeof 操作符重点说明


typeof 操作符的唯一目的就是检查数据类型。

如果我们希望检查任何从 Object 派生出来的结构类型,使用 typeof 是不起作用的,因为总是会得到 “object”。

检查 Object 种类的合适方式是使用 instanceof 关键字(数组与对象等),但即使这样也存在误差(目前没有百分百准备的方法,很遗憾)17.png


3. 原始值



3.1 原始值基本概念


除 Object 以外的所有类型都是不可变的(值本身无法被改变)。

例如,与 C 语言不同,JavaScript 中字符串是不可变的(JavaScript 中对字符串的操作一定返回了一个新字符串,原始字符串并没有被改变),我们称这些类型的值为“原始值”。

3.2 各类型说明


布尔类型:一个逻辑实体,可以有两个值:true 和 false

Null类型:只有一个值: null,就是啥也没有

Undefined类型:一个没有被赋值的变量会有个默认值 undefined

Number类型:没有像Java一样进一步细分类型,整数和浮点数都可以。还有一些带符号的值:+Infinity,-Infinity 和 NaN (非数值,Not-a-Number)

BigInt 类型:JavaScript 中的一个基础的数值类型,可以用任意精度表示整数。可以安全地存储和操作大整数,甚至可以超过数字的安全整数限制。BigInt是通过在整数末尾附加 n 或调用构造函数来创建的。

语法:BigInt(value);

value: 创建对象的数值。可以是字符串或者整数

BigInt() 不是构造函数,因此不能使用 new 操作符

String类型:字符串是不可更改的。这意味着字符串一旦被创建,就不能被修改。但是,可以基于对原始字符串的操作来创建新的字符串。

获取一个字符串的子串可通过选择个别字母或者使用 String.substr().

两个字符串的连接使用连接操作符 (+) 或者 String.concat().

Symbols类型:唯一的并且是不可修改的, 并且也可以用来作为Object的key的值

Object类型:对象可以被看作是一组属性的集合,用对象字面量语法来定义一个对象时,会自动初始化一组属性。

属性的值可以是任意类型,包括具有复杂数据结构的对象。属性使用键来标识,它的键值可以是一个字符串或者符号值(Symbol)18.png


目录
打赏
0
0
0
0
8
分享
相关文章
JavaScript中的数据类型以及存储上的差别
通过本文的介绍,希望您能够深入理解JavaScript中的数据类型及其存储差别,并在实际编程中灵活运用这些知识,以提高代码的性能和稳定性。
63 3
深度剖析 Vue.js 响应式原理:从数据劫持到视图更新的全流程详解
本文深入解析Vue.js的响应式机制,从数据劫持到视图更新的全过程,详细讲解了其实现原理和运作流程。
js中的数据类型
JavaScript 中的数据类型包括五种基本类型(String、Number、Undefined、Boolean、Null)和三种引用类型(Object、Array、Function,以及ES6新增的Symbol)。基本类型直接存储值,引用类型存储的是指向实际数据的内存地址。了解它们的区别对于掌握 JavaScript 的变量赋值和函数传参至关重要。
52 1
如何使用Puppeteer和Node.js爬取大学招生数据:入门指南
本文介绍了如何使用Puppeteer和Node.js爬取大学招生数据,并通过代理IP提升爬取的稳定性和效率。Puppeteer作为一个强大的Node.js库,能够模拟真实浏览器访问,支持JavaScript渲染,适合复杂的爬取任务。文章详细讲解了安装Puppeteer、配置代理IP、实现爬虫代码的步骤,并提供了代码示例。此外,还给出了注意事项和优化建议,帮助读者高效地抓取和分析招生数据。
154 0
如何使用Puppeteer和Node.js爬取大学招生数据:入门指南
JavaScript 数据类型详解:基本类型与引用类型的区别及其检测方法
JavaScript 数据类型分为基本数据类型和引用数据类型。基本数据类型(如 string、number 等)具有不可变性,按值访问,存储在栈内存中。引用数据类型(如 Object、Array 等)存储在堆内存中,按引用访问,值是可变的。本文深入探讨了这两种数据类型的特性、存储方式、以及检测数据类型的两种常用方法——typeof 和 instanceof,帮助开发者更好地理解 JavaScript 内存模型和类型检测机制。
180 0
JavaScript 数据类型详解:基本类型与引用类型的区别及其检测方法
JavaScript数据类型全解:编写通用函数,精准判断各种数据类型
JavaScript数据类型全解:编写通用函数,精准判断各种数据类型
91 0
2024了,你会使用原生js批量获取表单数据吗
2024了,你会使用原生js批量获取表单数据吗
76 4
为什么基础数据类型存放在栈中,而引用数据类型存放在堆中?
为什么基础数据类型存放在栈中,而引用数据类型存放在堆中?
173 1
LangChain-21 Text Splitters 内容切分器 支持多种格式 HTML JSON md Code(JS/Py/TS/etc) 进行切分并输出 方便将数据进行结构化后检索
LangChain-21 Text Splitters 内容切分器 支持多种格式 HTML JSON md Code(JS/Py/TS/etc) 进行切分并输出 方便将数据进行结构化后检索
82 0

热门文章

最新文章

  • 1
    当面试官再问我JS闭包时,我能答出来的都在这里了。
    47
  • 2
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    29
  • 3
    Node.js 中实现多任务下载的并发控制策略
    34
  • 4
    【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
    26
  • 5
    【JavaScript】深入理解 let、var 和 const
    49
  • 6
    【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
    47
  • 7
    【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
    57
  • 8
    【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
    57
  • 9
    如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)
    72
  • 10
    【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
    57
  • AI助理

    你好,我是AI助理

    可以解答问题、推荐解决方案等