JavaScript数据类型和数据结构

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

动态类型

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

let foo = 42;//foo现在是一个number类型
foo = "bar"//foo现在是一个string类型
foo = true;//foo现在是一个boolean类型

JavaScript也是一种弱类型语言,这意味着当操作涉及不匹配的类型时,它允许隐式类型转换,而不是抛出类型错误。

const foo = 42;//foo是一个number类型
const result = foo + "1";//JavaScript将foo强制转化为string类型,所以他可以被和另一个值连接
console.log(result);//421

隐式强制转换非常方便,但如果开发人员不打算进行转换,或者打算在另一个方向进行转换(例如,字符串到数据而不是数字到字符串),则可能是潜在的bug。对于symbol和BigInt,JavaScript故意禁止某些隐式类型转换。

数据类型

JavaScript语言中类型集合由原始值和对象组成。

原始值

直接表示在语言底层的不可变数据,总共7种
undefined,null,number,boolean,bigint,string,symbol
所有原始类型,除了null,都可以被typeof操作符测试。typeof null 返回“object”,所以必须使用===null去测试null。

所有原始类型,除了null和undefined,有它们对应的object包装类型,提供了有用的方法为了和原始值一起工作。例如,Number内置对象

数据类型 typeof返回值 对象包装器
undefined undefined
null object
number number Number
bigint bigint Bigint
boolean boolean Boolean
string string String
symbol symbol Symbol

对象

在JavaScript中,对象可以被视为属性的集合。使用对象文字语法,初始化一组有限的属性,则可以添加和删除属性。属性值可以是任何类型的值,包括能够构建复杂数据结构的其他对象。使用键值标识属性,键值是字符串值或符号值。

对象属性有2种类型:数据属性和访问器属性。

注意:重要的是要识别它的访问器属性,而不是访问器方法。我们可以通过使用函数作为值来给JavaScript对象类如访问器,但这不会使对象成为类。

一组属性的集合

原始值

在JavaScript中,一个原始值(原始值,原始数据结构)是不是object的和没有方法和属性的数据。
除对象类型(object)以外的其它任何类型定义的不可变的值(只本身无法被改变)。例如(与C语言不同),JavaScript中字符串是不可变的(JavaScript中对字符串的操作一定返回了新字符串,原始字符串并没有被改变)。我们称这些类型的值为"原始值"。

对象

在计算机科学中,对象是内存中的一个值,它可能被标识符引用。在JavaScript中,对象是唯一可变的值。事实上,函数也是具有额外可调用能力的对象。

属性

数据属性

数据属性关联了一对键值,它可以被下面的属性描述

value

属性的get访问所检索的值,可以是任何JavaScript值

writable

一个boolean值,指示是否可以通过赋值更改属性。

enumerable

一个boolean值,指示该属性是否可以由for … in …枚举

configurable

一个boolean值,指示属性是否可以删除,是否可以更改为访问器属性以及是否可以更改其属性

访问器属性

将key与两个访问器函数get,set之前相关联,以检索或存储值。

get
set
enumerable
configurable

方法

使用typeof操作符判断对象类型

JavaScript数据类型和数据结构_第1张图片
黑线表示继承,红色虚线表示原型

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