JS中对象的属性名

在JS中对象的属性名是什么格式的?
普通对象的属性名只能是“字符串”(普通对象的属性名可以是基本数据类型值)
但是普通对象的属性名不能是对象,如果是对象,需要转换为字符串存储

Map 这种数据结构支持 对象作为属性名

对象作为属性名会toString转换为字符串"[Object Object ]"
普通对象toString 是调取 Object.prototype.toString 是用来检测数据类型的

js运行的底层机制

JS中存在多种作用域(全局、函数私有的、块级私有的)
代码执行之前,首先会形成自己的执行上下文,然后把上下文进栈,进栈后,在当前上下文中在去依次执行代码

  • 只有页面关闭,全局上下文EC(G)才会出栈
  • 每一个执行上下文中一定存在一个空间,用来存储创建的变量的 => 变量对象VO(G)

=号赋值操作

1、创建值--------------基本类型值直接存储在栈内存中
2、创建变量
3、变量和值指针关联

创建对象步骤:

1、创建一个堆内存

2、把键值对存储到堆内存

3、堆内存地址放到栈中,供变量调用

javascript 底层源代码 js底层实现_堆内存

javascript 底层源代码 js底层实现_javascript 底层源代码_02


创建对象步骤:

1、创建一个堆内存

2、把键值对存储到堆内存

3、堆内存地址放到栈中,供变量调用

javascript 底层源代码 js底层实现_javascript_03


javascript 底层源代码 js底层实现_堆内存_04

var a={n:1};
var b=a;
a.x=a={n:2};//执行顺序 a.x=值   a=值
console.log(a.x);//undefined
console.log(b)//{n:1,x:{n:2}}

function fn() 创建一个变量叫fn 存储的值是一个函数
var fn = function(){}; 和这个类似

函数堆

  1. 把函数体中的代码当做字符串存储到堆中 “代码字符串” =>创建函数不执行,函数没啥用
  2. 函数也是对象,他也有自己的键值对

fn(x)执行传递的值是实参 定义函数设置的是形参
函数执行的目的? 想让之前存储在堆中的代码字符串执行 -> 代码执行就要有自己的执行环境


var a={n:1}
var b=a;
a.x=a={n:2};
console.log(a.x)
console.log(b)

javascript 底层源代码 js底层实现_javascript 底层源代码_05

var x=[12,23]
function fn(y){
	y[0]=100;
	y=[100];
	y[1]=200;
	console.log(y);
}
fn(x)
console.log(x)

javascript 底层源代码 js底层实现_字符串_06