首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
01 | 函数式vs.面向对象:响应未知和不确定
02 | 如何通过闭包对象管理程序中状态的变化?
03 | 如何通过部分应用和柯里化让函数具象化?
04 | 如何通过组合、管道和reducer让函数抽象化?
05|map、reduce和monad如何围绕值进行操作?
06 | 如何通过模块化、异步和观察做到动态加载?
07 | 深入理解对象的私有和静态属性
08|深入理解继承、Delegation和组合
09|面向对象:通过词法作用域和调用点理解this绑定
10|JS有哪8种数据类型,你需要注意什么?
11|通过JS引擎的堆栈了解闭包原理
12|JS语义分析该用迭代还是递归?
13 | JS引擎如何实现数组的稳定排序?
14 | 通过SparkPlug深入了解调用栈
15 | 如何通过哈希查找JS对象内存地址?
16 | 为什么环形队列适合做Node数据流缓存?
17 | 如何通过链表做LRU/LFU缓存?
18 | TurboFan如何用图做JS编译优化?
19 | 通过树和图看如何在无序中找到路径和秩序
20 | 算法思想:JS中分治、贪心、回溯和动态规划
21 | 创建型:为什么说Redux可以替代单例状态管理
22|结构型:Vue.js如何通过代理实现响应式编程
23 | 结构型:通过jQuery看结构型模式
24 | 行为型:通过观察者、迭代器模式看JS异步回调
25 | 行为型:模版、策略和状态模式有什么区别?
26|特殊型:前端有哪些处理加载和渲染的特殊“模式”?
27|性能:如何理解JavaScript中的并行、并发?
28|性能:通过Orinoco、Jank Busters看垃圾回收
29|网络:从HTTP/1到HTTP/3,你都需要了解什么?
30|安全:JS代码和程序都需要注意哪些安全问题?
31|测试(一):开发到重构中的测试
32|测试(二):功能性测试
33|测试(三):非功能性测试
34|静态类型检查:ESLint语法规则和代码风格的检查
35|Flow:通过Flow类看JS的类型检查
36|包管理和分发:通过NPM做包的管理和分发
37|编译和打包:通过Webpack、Babel做编译和打包
38|语法扩展:通过JSX来做语法扩展
39|Polyfill:通过Polyfill让浏览器提供原生支持
40|微前端:从MVC贫血模式到DDD充血模式
41|大前端:通过一云多端搭建跨PC/移动的平台应用
42|元编程:通过Proxies和Reflect赋能元编程
当前位置:
首页>>
技术小册>>
JavaScript进阶实战
小册名称:JavaScript进阶实战
### 章节标题:10 | JS有哪8种数据类型,你需要注意什么? 在JavaScript的世界里,数据类型是构建程序逻辑的基石。理解并掌握JavaScript中的数据类型对于编写高效、可维护的代码至关重要。JavaScript中定义了八种基本数据类型,它们分别是:`Undefined`、`Null`、`Boolean`、`Number`、`BigInt`(ES2020新增)、`String`、`Symbol`(ES6新增)以及`Object`(虽然`Object`通常被视为复杂数据类型,但在严格意义上,函数、数组等也是基于`Object`的特定类型,这里我们将其单独列出以符合题目要求,但在讨论基本数据类型时不包括`Object`及其子类)。接下来,我们将逐一探讨这些数据类型,并指出在使用时需要注意的关键点。 #### 1. Undefined `Undefined`类型表示一个声明了但未初始化的变量的值,或者一个函数没有返回值时的默认值。在JavaScript中,`undefined`是一个全局变量,其值是`Undefined`类型。 **注意事项**: - 不要将`undefined`与`null`混淆。虽然两者在逻辑上可能都表示“无”或“空”,但它们在JavaScript中有明确的语义区别。 - 当访问一个未声明的变量时,JavaScript不会报错,而是返回`undefined`。然而,这是不推荐的做法,因为它可能导致难以追踪的错误。建议使用`let`、`const`或`var`来明确声明变量。 #### 2. Null `Null`类型表示一个空值,即该变量的值为空。`null`是JavaScript中的字面量,用来表示“没有对象”或“没有值”的情况。 **注意事项**: - `null`与`undefined`在逻辑上相似,但在使用时应当区分它们的意图。`null`通常用于表示一个变量应该指向一个对象,但当前并不指向任何对象。 - 在进行条件判断时,`null`和`undefined`在大多数情况下会被视为等价(即“假值”),但在严格等于(`===`)比较中,它们是不同的。 #### 3. Boolean `Boolean`类型表示逻辑实体,只有两个值:`true`和`false`。 **注意事项**: - 在JavaScript中,除了`false`、`0`、`""`(空字符串)、`null`、`undefined`和`NaN`被视为假值(falsy values)外,其他所有值都被视为真值(truthy values)。 - 在条件判断中,应谨慎使用类型转换,特别是当涉及到非布尔值的表达式时。 #### 4. Number `Number`类型用于表示整数和浮点数。JavaScript中的数字遵循IEEE 754标准,这意味着它们可以是32位或64位的浮点数。 **注意事项**: - 整数和浮点数在JavaScript中没有严格的区分,都使用`Number`类型表示。 - 注意浮点数运算的精度问题,由于浮点数的表示方式,某些计算可能会产生不精确的结果。 - 使用`Number.isInteger()`、`Number.isSafeInteger()`等方法可以帮助你判断数字是否为整数或安全整数(在JavaScript中可以精确表示的最大整数)。 #### 5. BigInt `BigInt`是一种内置对象,提供了一种方法来表示大于`2^53 - 1`的整数。这是ES2020中新增的数据类型,用于解决JavaScript中`Number`类型无法安全表示大整数的问题。 **注意事项**: - `BigInt`与`Number`不是互通的,即你不能直接将`BigInt`与`Number`进行数学运算,除非显式转换。 - 使用`BigInt`时,需要在整数字面量后添加`n`后缀,例如`123n`。 - 考虑到兼容性,在引入`BigInt`之前,应检查你的目标环境是否支持这一特性。 #### 6. String `String`类型用于表示文本数据。JavaScript中的字符串是不可变的,即一旦创建,就不能更改字符串中的字符。 **注意事项**: - 使用单引号(`'`)、双引号(`"`)或反引号(\``,ES6引入,支持模板字符串)来定义字符串。 - 字符串的拼接可以通过`+`操作符或使用模板字符串来实现。 - 字符串的索引是从0开始的,可以使用方括号`[]`或`charAt()`方法来访问字符串中的特定字符。 #### 7. Symbol `Symbol`是ES6中引入的一种新的数据类型,用于创建唯一的标识符。每个`Symbol`值都是唯一的,这意味着即使两个`Symbol`值是通过相同的字符串创建的,它们也不相等。 **注意事项**: - `Symbol`函数可以接受一个可选的字符串作为描述,但此描述主要是为了调试目的,并不影响`Symbol`值的唯一性。 - `Symbol`值作为对象属性的键时,可以提供一种方式来防止属性名冲突。 - 使用`Symbol.for()`和`Symbol.keyFor()`可以在全局`Symbol`注册表中创建和检索`Symbol`值。 #### 8. Object(作为基本数据类型讨论时的特殊说明) 虽然`Object`在JavaScript中通常被视为复杂数据类型,但为了符合题目要求,我们在这里简要提及。`Object`是JavaScript中所有复杂数据类型的基类,包括数组、函数等。 **注意事项**: - `Object`类型用于存储键值对集合,其中键是字符串或`Symbol`,值是任意类型。 - 使用对象字面量`{}`来创建对象,并通过点(`.`)或方括号(`[]`)操作符来访问属性。 - 对象的属性可以动态添加或删除,这是JavaScript灵活性的一个体现。 ### 总结 了解JavaScript中的八种数据类型是深入学习JavaScript的必经之路。每种数据类型都有其特定的用途和注意事项。在编写JavaScript代码时,正确选择和使用数据类型对于确保代码的正确性、可读性和性能至关重要。此外,随着ECMAScript标准的不断演进,新的数据类型(如`BigInt`)的引入为我们提供了更多的选择,同时也要求我们保持对新特性的关注和学习。
上一篇:
09|面向对象:通过词法作用域和调用点理解this绑定
下一篇:
11|通过JS引擎的堆栈了解闭包原理
该分类下的相关小册推荐:
经典设计模式Javascript版
Node.js 开发实战
剑指javascript-ES6
JavaScript入门与进阶
深入学习前端重构知识体系
WebSocket入门与案例实战
零基础学JavaScript
编程入门课:Javascript从入门到实战
Flutter核心技术与实战
JavaScript面试指南
javascript设计模式原理与实战
ES6入门指南