J06 数据类型之间的区别

167 阅读2分钟

1.内存的概念

  • 栈内存(Stack)
  • 堆内存(Heap)

所谓的堆、栈内存,其实就是在计算机内存中分配出来一块空间,用来执行和存储代码

2.JS代码需要在一个环境中运行

  • 2.1 浏览器(引擎)
  • 2.2 node(基于V8渲染js)
  • 2.3 webview(V8引擎)

3.webkit底层渲染的过程

  • 3.1 在浏览器中打开页面,浏览器引擎会渲染相关的代码(包含JS代码),把代码自上而下执行
  • 3.2 浏览器需要执行代码,会提供一个供代码执行的环境,供代码自上而下执行,我们会把这个环境叫做ECStack(Execution Context Stack)执行环境栈=>栈内存Stack
  • 3.3 最开始执行的是全局代码,所以形成一个EC(GLOBAL)全局执行上下文,在栈内存中执行全局的代码
  • 3.4 在全局的执行上下文中有一个VO(GLOBAL)全局变量对象,可以把定义的变量和对应的值存储到这里

4.基本类型的存储方式(值类型)

值类型由于结构相对简单,直接把创建的值存储到 "栈内存"中即可,所以栈内存有两个作用:供代码执行;存储基本类型值

  • 4.1 创建一个值,(基本类型值直接存储在栈内存中即可)
  • 4.2 创建一个变量a,把其存储到VO(GLOBAL)中
  • 4.3 让创建的变量a和创建的值12关联到一起

5.引用数据类型(对象函数)

引用数据类型的结构相对复杂(一个综合体,包含很多值),不能直接存储在占内存中,需要单独开辟空间来存储,这个空间就是'堆内存';引用数据类型值都存储在单独开辟的 '堆内存中',所以堆内存的作用是:存储引用类型的值

6.数据类型的计算

let a = 12;
let b = a;
b = 13;
console.log(a);//=>13
let n = {
	name: '张三'
};
let m = n;
m.name = '李四';
console.log(n.name);//=>李四


let a = {},
b = '0',
c = 0;
a[b] = '张三';
a[c] = '李四';
console.log(a[b]);//=>李四
let a = {},
b = Symbol('1'),
c = Symbol('1');
a[b] = '张三';
a[c] = '李四';
console.log(a[b]);//=>张三
let a = {},
b = {
	n: '1'
},
c = {
	m: '2'
};
a[b] = '张三';
a[c] = '李四';
console.log(a[b]);//=>李四

 


var a = 0;
var b = a;
b++;
alert(a); //=>"0"
var o = {};
o.a = 0;
var b = o;
b.a = 10;
alert(o.a); //=>"10"
let x = [1, 2, 3];
let y = x;
let z = [4, 5, 6];
y[0] = 10;
y = z;
z[1] = 20;
x[2] = z = 30;
console.log(x, y, z);//=>x[10,2,30] y[4,20,6] z 30
let a = {
	n: 1
};
let b = a;
a.x = a = {
	n: 2
};
console.log(a.x);//=>{n:2}
console.log(b);//=>{n:1,x:{n:2}}