资讯专栏INFORMATION COLUMN

JavaScript数据类型与数据结构

fireflow / 1562人阅读

摘要:字符串类型的字符串类型用于表示文本数据。例如,使用一个分隔符,一个可以模仿一个列表一个的数组可能更适合一些。不幸的是,当一个分隔符在用于列表中的元素时,打乱了这个列表。属性的值可以是任意类型,包括具有复杂数据结构的对象。

编程语言都具有内建的数据结构,但各种编程语言的数据结构常有不同之处。本文试图列出 JavaScript 语言中内建的数据结构及其属性,它们可以用来构建其他的数据结构;同时尽可能的描述与其他语言的不同之处。

动态类型

JavaScript 是一种弱类型或者说动态语言。这意味着你不用提前声明变量的类型,在程序运行过程中,类型会被自动确定。这也意味着你可以使用同一个变量保存不同类型的数据:

var foo = 42;    // foo is a Number now
foo = "bar"; // foo is a String now
foo = true;  // foo is a Boolean now

注:TypeScript编译语言针对此问题做了改进;

数据类型

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

6 种原始类型:

Boolean

Null

Undefined

Number

String

Symbol (ECMAScript 6 新定义)

和 Object

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

布尔类型(boolean)

布尔表示一个逻辑实体,可以有两个值:true 和 false。

Null类型

Null 类型只有一个值: null。值 null 特指对象的值未设置。值 null 是一个字面量,它不像undefined 是全局对象的一个属性。null 是表示缺少的标识,指示变量未指向任何对象。把 null 作为尚未创建的对象,也许更好理解。在 APIs 中,null 常在返回类型是对象,但没关联值的地方使用。

Undefined类型

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

数字类型

根据 ECMAScript 标准,JavaScript 中只有一种数字类型:基于 IEEE 754 标准的双精度 64 位二进制格式的值(-(263 -1) 到 263 -1)。它并没有为整数给出一种特定的类型。除了能够表示浮点数外,还有一些带符号的值:+Infinity,-Infinity 和 NaN (非数值,Not-a-Number)。

字符串类型

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

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

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

可以使用字符串来表达复杂的数据。以下是一些很好的性质:

容易连接构造复杂的字串符

字符串容易被调试(你看到的往往在字符串里)

字符串通常是许多APIs的常见标准 (input fields, local storage values, XMLHttpRequest当使用responseText等的时候回应) 而且他只能与字符串一同使用。

按照惯例, 字符串一般可以用来表达任何数据结构。这不是一个好主意。例如,使用一个分隔符,一个可以模仿一个列表(一个JavaScript的数组可能更适合一些) 。不幸的是,当一个分隔符在用于列表中的元素时,打乱了这个列表。 一个转义字符等。所有这些惯例都变成了一个不存在的维护负担而没有正确的工具使用。

表达文本数据和符号数据时候推荐使用字符串。当表达复杂的数据时,使用字符串解析和适当的缩写。

符号类型

符号(Symbols)是ECMAScript 第6版新定义的。符号类型是唯一的并且是不可修改的, 并且也可以用来作为Object的key的值(如下). 在某些语言当中也有类似的原子类型(Atoms). 你也可以认为为它们是C里面的枚举类型.

Symbol()函数会返回symbol类型的值,该类型具有静态属性和静态方法。它的静态属性会暴露几个内建的成员对象;它的静态方法会暴露全局的symbol注册,且类似于内建对象类,但作为构造函数来说它并不完整,因为它不支持语法:"new Symbol()"。每个从Symbol()返回的symbol值都是唯一的。

const symbol1 = Symbol();
const symbol2 = Symbol(42);
const symbol3 = Symbol("foo");

console.log(typeof symbol1);
// expected output: "symbol"

console.log(symbol3.toString());
// expected output: "Symbol(foo)"

console.log(Symbol("foo") === Symbol("foo"));
// expected output: false
对象

在计算机科学中, 对象是指内存中的可以被 标识符引用的一块区域.

属性

在 Javascript 里,对象可以被看作是一组属性的集合。用对象字面量语法来定义一个对象时,会自动初始化一组属性。(也就是说,你定义一个var a = "Hello",那么a本身就会有a.substring这个方法,以及a.length这个属性,以及其它;如果你定义了一个对象,var a = {},那么a就会自动有a.hasOwnProperty及a.constructor等属性和方法。)而后,这些属性还可以被增减属性的值可以是任意类型,包括具有复杂数据结构的对象。属性使用键来标识,它的键值可以是一个字符串或者符号值(Symbol)。

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

数据属性

数据属性是键值对,并且每个数据属性拥有下列特性:

访问性属性
访问器属性有一个或两个访问器函数 (get 和 set) 来存取数值,并且有以下特性:

"标准的" 对象, 和函数节
一个 Javascript 对象就是键和值之间的映射。键是一个字符串(或者 Symbol) ,值可以是任意类型的值。 这使得对象非常符合哈希表。

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

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

有序集: 数组和类型数组

数组是一种使用整数作为键(integer-key-ed)属性和长度(length)属性之间关联的常规对象。此外,数组对象还继承了 Array.prototype 的一些操作数组的便捷方法。例如, indexOf (搜索数组中的一个值) or push (向数组中添加一个元素),等等。 这使得数组是表示列表或集合的最优选择。

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/102731.html

相关文章

  • WebSocket系列之JavaScript中数字数据如何转换为二进制数据

    摘要:以和为例,说明中的数字数据如何转换为二进制数据。对象用来表示通用的固定长度的原始二进制数据缓冲区。中的数字数据如何转换为二进制数据对和有了一个大概的了解,下面让我们来看下它是如何进行二进制数据操作的。 概述 本文主要通过对JavaScript中数字数据与二进制数据之间的转换,让读者能够了解在JavaScript中如何对数字类型(包括但不限于Number类型)进行处理。 二进制数据在日常...

    MASAILA 评论0 收藏0
  • JavaScript学习第一天笔记(变量、常量、数据类型

    摘要:变量与常量变量定义变量是存储数据信息的容器。中,变量是弱类型,也被称为松散类型。三类型布尔类型只有两个值均为小写如果大写活着大小写混合,识别为另一个变量名称。 JavaScript简介 JavaScript是一门跨平台、面向对象的轻量级脚本语言,运行于JavaScript解释器或者引擎中。JavaScript中,包括三个主要的部分1.核心语法内容(ECMAScript)2.文档对象模型...

    tinysun1234 评论0 收藏0
  • JavaScript--变量基本数据类型

    摘要:中变量可能包含两种不同的数据类型的值基本类型和引用类型。本文主要介绍基本数据类型及其特点。操作符在介绍基本类型值之前,先说下操作符,操作符会返回数据类型的字符串表示。所有未初始化的变量均会保存该值。 前言JavaScript中的变量为松散类型,所谓松散类型就是指当一个变量被申明出来就可以保存任意类型的值,就是不像SQL一样申明某个键值为int就只能保存整型数值,申明varchar只能保...

    XanaHopper 评论0 收藏0
  • 前端基础进阶(一):内存空间详细图解

    摘要:一栈数据结构与不同,中并没有严格意义上区分栈内存与堆内存。引用数据类型的值是保存在堆内存中的对象。不允许直接访问堆内存中的位置,因此我们不能直接操作对象的堆内存空间。为了更好的搞懂变量对象与堆内存,我们可以结合以下例子与图解进行理解。 showImg(https://segmentfault.com/img/remote/1460000009784102?w=1240&h=683); ...

    _Suqin 评论0 收藏0
  • JavaScript设计模式开发实践 | 01 - 面向对象的JavaScript

    摘要:在中,并没有对抽象类和接口的支持。例如,当对象需要对象的能力时,可以有选择地把对象的构造器的原型指向对象,从而达到继承的效果。本节内容为设计模式与开发实践第一章笔记。 动态类型语言 编程语言按数据类型大体可以分为两类:静态类型语言与动态类型语言。 静态类型语言在编译时已确定变量类型,动态类型语言的变量类型要到程序运行时,待变量被赋值后,才具有某种类型。 而JavaScript是一门典型...

    suxier 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<