// 对对象进行遍历 // 1.普通for循环 var infoKeys = Object.keys(info) for (var i = 0; i < infoKeys.length; i++) { var key = infoKeys[i] var value = info[key] console.log(`key: ${key}, value: ${value}`) }
**遍历方式二:for in 遍历方法 **
1 2 3 4
for (var key in info) { var value = info[key] console.log(`key: ${key}, value: ${value}`) }
栈内存和堆内存
我们知道程序是需要加载到内存中来执行的,我们可以将内存划分为两个区域:栈内存和堆内存。
原始类型占据的空间是在栈内存中分配的;
对象类型占据的空间是在堆内存中分配的;
值类型和引用类型
原始类型的保存方式:在变量中保存的是值本身
所以原始类型也被称之为值类型;
对象类型的保存方式:在变量中保存的是对象的“引用”
所以对象类型也被称之为引用类型;
思考下面的现象
现象一:两个对象的比较
现象二:引用的赋值
1 2 3 4 5 6 7 8 9 10 11
// // 2.现象二: 引用的赋值 var info = { name: "why", friend: { name: "kobe" } }
var friend = info.friend friend.name = "james" console.log(info.friend.name) // james
3.现象三: 值传递
1 2 3 4 5 6
functionfoo(a) { a = 200 } var num = 100 foo(num) console.log(num) // 100
4.现象四: 引用传递, 但是在函数中创建了一个新对象, 没有对传入对象进行修改
1 2 3 4 5 6 7 8 9 10
functionfoo(a) { a = { name: "why" } } var obj = { name: "obj" } foo(obj) console.log(obj)//name:"obj"
5.现象五: 引用传递 ** 但是对传入的对象进行修改**
1 2 3 4 5 6 7 8 9
functionfoo(a) { a.name = "why" }
var obj = { name: "obj" } foo(obj) console.log(obj)//name="why"