Javascript学习之数据类型

80 阅读2分钟

js.jpeg

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,点击查看活动详情

前言

Javascript中的数据类型分为基本数据类型和引用数据类型。

基本数据类型有:String、Number、Boolean、Null、Undefined、Symbol

引用数据类型有:Object

栈和堆

这里说的栈和堆为内存操作场景下的概念

javascript中变量都存在内存中,存储过程中内存开辟了两块区域:一个称为栈(stack),一个称为堆(heap)。

栈:栈会自动分配内存空间,并且会自动释放内存。占用固定的空间大小,用于存放简单的数据值,例如String、Number、Boolean等等,也就是说javascript中的基本数据类型存入到栈内存中。

堆:堆不会自动分配和释放,用于存放引用类型(引用类型存在堆内存里,引用类型的引用存在栈内存里)。

基本数据类型

String

存储字符的变量

const str1 = '字符串1'; 
const str2 = "字符串2";  

Number

const num1 = 99;
const num2 = 99.09;
const num3 = 100e3;
const num4 = 100e-3;

NaN(Not a Number):

  • 为Number类型,是一种特殊的数值
  • NaN与任何数比较都为false,包含本身
  • NaN与任何数进行运算都为NaN

Number类型为浮点类型,运算需要精确计算。

Boolean

布尔类型,只有true和false两个值

const a = true;
const b = false;

Null 和 Undefined

const x = null;    // 没有对象,空值
const y = undefined;    // 没有定义值

typeof null 为object,是因为在初代js中,为了性能考虑选择使用低位存储变量的类型信息。000开头代表对象,因为null全部为0,所以判断为object

Symbol

Symbol的实例唯一不可变,确保对象的属性不重复

const name = Symbol("name")
console.log(name)    // Symbol(name)

引用数据类型

Javascript中的引用数据类型也就是对象数据类型(Object),包含Object、Array、Function、Data等

当创建一个对象类型时,堆内存中会开辟一个内存空间存放对象值,这个内存空间会拥有一个指针

const obj = {}

这里的常量obj,假设存放了指针#001,则在#001这个指针地址存放了值{}

const obj1 = []
const obj2 = []
obj2.push("a")

将变量赋值给另一个变量时,复制的是目标变量的指针地址。假设obj1的地址为#001,那么obj2的地址同样为#001。当对任意一个变量进行修改数据的操作时,相当于修改了地址#001对应的值,导致两个变量的值都发生了改变

举个栗子:

let obj1 = {
    name: "aaa"
}
console.log(obj1)   // { name: 'aaa' }
let obj2 = obj1
console.log(obj2)   // { name: 'aaa' }
obj2.name = "bbb"
console.log(obj2)   // { name: 'bbb' }
console.log(obj1)   // { name: 'bbb' }