浅谈JS中的数据类型和数据结构

js是一种动态类型的弱类型语言

这说明我们可以不用提前声明变量的类型去使用,类型会被自动确定且可以用同一个变量保存不同的类型数据

var a=123;//数字类型
a="小明";//字符串类型
a=true;//布尔类型

数据类型

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

7种原始类型(数据类型)(undefined Boolean Number String BigInt(任意精度表示整数)Symbol(符号类型) null

(非数据结构即引用类型)Object

原始值

除 Object 以外的所有类型都是不可变的(值本身无法被改变)。例如,与 C 语言不同,JavaScript 中字符串是不可变的(译注:如,JavaScript 中对字符串的操作一定返回了一个新字符串,原始字符串并没有被改变)。我们称这些类型的值为“原始值”。

布尔类型(Boolean)

布尔表示一个逻辑实体,有两个值分别为true和false

Null(Null类型)

Null 类型只有一个值: null, null 是表示缺少的标识,指示变量未指向任何对象

Undefined(Underfined类型)

一个没有被赋值的变量会有个默认值: undefined undefined全局对象的一个属性。也就是说,它是全局作用域的一个变量

数据类型

根据 ECMAScript 标准,JavaScript 中只有一种数字类型:基于 IEEE 754 标准的双精度 64 位二进制格式的值(-(253 -1) 到 253 -1)。它并没有为整数给出一种特定的类型。除了能够表示浮点数外,还有一些带符号的值:+Infinity-Infinity 和 NaN (非数值,Not-a-Number)。要检查值是否大于或小于 +/-Infinity,你可以使用常量 Number.MAX_VALUE 和 Number.MIN_VALUE

BigInt类型

BigInt类型是 JavaScript 中的一个基础的数值类型,可以用任意精度表示整数。通过使用常量Number.MAX_SAFE_INTEGER,您可以获得可以用数字递增的最安全的值。通过引入 BigInt,您可以操作超过Number.MAX_SAFE_INTEGER的数字可以对BigInt使用运算符+*-**%,就像对数字一样。

在将BigInt转换为Boolean时,它的行为类似于一个数字:if||&&Boolean 和!。

BigInt不能与数字互换操作。否则,将抛出TypeError

String(字符串类型)

JavaScript 的字符串类型用于表示文本数据。它是一组16位的无符号整数值的“元素”。在字符串中的每个元素占据了字符串的位置。第一个元素的索引为 0,下一个是索引 1,依此类推。字符串的长度是它的元素的数量。

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

  • 获取一个字符串的子串可通过选择个别字母或者使用 String.substr().
  • 两个字符串的连接使用连接操作符 (+) 或者 String.concat().

Symbol(符号类型)

符号(Symbols)是 ECMAScript 第6版新定义的。符号类型是唯一的并且是不可修改的, 并且也可以用来作为 Object 的 key 的值

Object(对象)

ECMAScript 定义的对象中有两种属性:数据属性和访问器属性。

数据属性是键值对,访问器属性有一个或两个访问器函数 (get 和 set) 来存取数值

标准的对象和函数

一个 JavaScript 对象就是键和值之间的映射。键是一个字符串(或者 Symbol),值可以是任意类型的值

函数是一个附带可被调用功能的常规对象。

日期

当你想要显示日期时,毋庸置疑,使用内建的 Date 对象。


有序集:数组和类型数组

数组是一种使用整数作为键(integer-key-ed)属性和长度(length)属性之间关联的常规对象。

数组对象还继承了 Array.prototype 的一些操作数组的便捷方法。例如, indexOf (搜索数组中的一个值) or push (向数组中添加一个元素),等等。 这使得数组是表示列表或集合的最优选择

类型数组(Typed Arrays)是 ECMAScript Edition 6 中新定义的 JavaScript 内建对象,提供了一个基本的二进制数据缓冲区的类数组视图

键控集:Maps,Sets,WeakMaps,WeakSets

这些数据结构把对象的引用当作键,其在 ECMAScript 第6版中有介绍。当 Map 和 WeakMap 把一个值和对象关联起来的时候, Set 和 WeakSet 表示一组对象。 Map 和 WeakMaps 之间的差别在于,在前者中,对象键是可枚举的

在纯 ECMAScript 5 下可以实现 Maps 和 Sets 。然而,因为对象并不能进行比较(就对象“小于”示例来讲),所以查询必定是线性的。他们本地实现(包括WeakMaps)查询所花费的时间可能是对数增长。

通常,可以通过直接在对象上设置属性或着使用 data-*属性,来绑定数据到 DOM 节点。然而缺陷是在任何的脚本里,数据都运行在同样的上下文中。Maps 和 WeakMaps 方便将数据私密的绑定到一个对象。

结构化数据JSON

JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,来源于 JavaScript 同时也被多种语言所使用。 JSON 用于构建通用的数据结构

以上就是我总结的关于数据类型和数据结构的理解希望能帮到你们,谢谢

你可能感兴趣的:(数据结构,javascript)