「这是我参与2022首次更文挑战的第12天,活动详情查看:2022首次更文挑战」。
初学JavaScript时,没有太过注意JavaScript的数据类型。而在学习C++、Java时,数据类型和数据结构是相当重要的,因为JavaScript 是一种弱类型或者说动态语言。在编码时,开发者无需提前声明变量的类型,在程序运行过程中,类型会被自动确定。JavaScript中的变量可以保存不同类型的数据。
最新的ES标准定义了8种数据类型,包括了7种原始类型(undefined、Boolean、Number、String、BigInt、Symbol、null)和Object对象。
原始值
Undefined
一个没有被赋值的变量会有一个默认值undefined,undefined是全局对象的一个属性。也就是说,它是全局作用域的一个变量。undefined的最初值就是原始数据类型undefined。一个函数如果没有使用return语句指定返回值,就会返回一个undefined值。
Boolean
Boolean表示一个逻辑实体,可以有两个值:true和false。
Number
ES标准定义,JavaScript中只有一种数字类型:基于 IEEE 754 标准的双精度 64 位二进制格式的值。它并没有为整数给出一种特定的类型。除了能够表示浮点数外,还有一些带符号的值:+Infinity,-Infinity 和 NaN (非数值,Not-a-Number)。
数字类型中只有一个整数有两种表示方法: 0 可表示为 -0 和 +0("0" 是 +0 的简写)
String
String类型在Java里是我们着重学习的对象。在JavaScript 的字符串类型用于表示文本数据。它是一组16位的无符号整数值的“元素”。在字符串中的每个元素占据了字符串的位置。第一个元素的索引为 0,下一个是索引 1,依此类推。字符串的长度是它的元素的数量。
在Java中,String一旦被赋值就无法修改,每次对String值的修改都是返回了新的String。在 JavaScript 中的字符串也是不可更改的。这意味着字符串一旦被创建,就不能被修改。但是,可以基于对原始字符串的操作来创建新的字符串。
例如:String.substr()、String.concat()。
字符串可以表达任何数据结构,数组、对象等都可以通过方法转为字符串,也可以由字符串转回去,但是一般不建议这么做,在转换过程中,可能会出现错误。
BigInt
BigInt类型是 JavaScript 中的一个基础的数值类型,可以用任意精度表示整数。使用 BigInt,可以安全地存储和操作大整数,甚至可以超过数字的安全整数限制。BigInt 是通过在整数末尾附加 n 或调用构造函数来创建的。
示例:
> const x = 2n ** 53n;
9007199254740992n
> const y = x + 1n;
9007199254740993n
可以对BigInt使用运算符+、``*、``-、``**和%,就像对数字一样。BigInt 严格来说并不等于一个数字。并且BigInt不能与数字互相转换,会抛出TypeError。
Symbol
符号(Symbols)是ES6中新定义的。符号类型是唯一的并且是不可修改的, 并且也可以用来作为 Object 的 key 的值。类似于C语言中的枚举类型。
Null
null类型只有一个值:null。通常来说,表示一个不存在、对象、地址引用了。
Object对象
在JavaScript中,对象可以看作是一组属性的集合。是一个独立的实体,
要记的重点:
- JavaScript对象是一个独立的实体,它在属性和方法方面拥有多个值。
- 对象属性存储文字值,方法表示函数。
- 可以使用对象字面量或对象构造函数语法来创建对象。
- 对象字面量,示例:
var person = { firstName: "James", lastName: "Bond", age: 25, getFullName: function () { return this.firstName + ' ' + this.lastName } }; - 对象构造函数,示例:
person = new Object(); person.firstName = "James"; person["lastName"] = "Bond"; person.age = 25; person.getFullName = function () { return this.firstName + ' ' + this.lastName; }; - 可以使用点符号或 [ ] 括号访问对象属性和方法。
- 对象通过引用从一个函数传递到另一个函数。
- 一个对象可以包含另一个对象作为属性。
常用的数据结构
JavaScript中的数据结构和其他语言一样,比如:数组、列表、栈、队列、链表、字典、树、图、集合等等。日常开发最常用的还是数组。