JS中对象的属性名
在JS中对象的属性名是什么格式的?
普通对象的属性名只能是“字符串”(普通对象的属性名可以是基本数据类型值)
但是普通对象的属性名不能是对象,如果是对象,需要转换为字符串存储
Map 这种数据结构支持 对象作为属性名
对象作为属性名会toString转换为字符串"[Object Object ]"
普通对象toString 是调取 Object.prototype.toString 是用来检测数据类型的
js运行的底层机制
JS中存在多种作用域(全局、函数私有的、块级私有的)
代码执行之前,首先会形成自己的执行上下文,然后把上下文进栈,进栈后,在当前上下文中在去依次执行代码
- 只有页面关闭,全局上下文EC(G)才会出栈
- 每一个执行上下文中一定存在一个空间,用来存储创建的变量的 => 变量对象VO(G)
=号赋值操作
1、创建值--------------基本类型值直接存储在栈内存中
2、创建变量
3、变量和值指针关联
创建对象步骤:
1、创建一个堆内存
2、把键值对存储到堆内存
3、堆内存地址放到栈中,供变量调用
创建对象步骤:
1、创建一个堆内存
2、把键值对存储到堆内存
3、堆内存地址放到栈中,供变量调用
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(){}; 和这个类似
函数堆
- 把函数体中的代码当做字符串存储到堆中 “代码字符串” =>创建函数不执行,函数没啥用
- 函数也是对象,他也有自己的键值对
fn(x)执行传递的值是实参 定义函数设置的是形参
函数执行的目的? 想让之前存储在堆中的代码字符串执行 -> 代码执行就要有自己的执行环境
var a={n:1}
var b=a;
a.x=a={n:2};
console.log(a.x)
console.log(b)
var x=[12,23]
function fn(y){
y[0]=100;
y=[100];
y[1]=200;
console.log(y);
}
fn(x)
console.log(x)