文章目录
对象
只要不是五种基本数据类型(ES5 五种,ES6 加了 Symbol),都是对象。
对象的值保存在堆内存中,对象的引用(即变量)是保存在栈内存中的。
垃圾回收机制
如果一个对象没有变量指向它,它就会被回收。重点是理解 等号左右两边,它们都是独立的一部分,不要把它们看成整体。 右边只是一个对象而已,左边的变量也不是对象的名字,对象没有名字,只是指向它的地址而已。
1 | let obj1 = { |
创建对象
字面量创建
var obj = {}
,也叫直接创建构造函数创建
var obj = new Object()
Object.create()
该方法使用现用对象来提供新对象的__proto__
,例1
2
3const o = Object.create({ x: 1, y: 2});
o.__proto__ // { x: 1, y: 2}
o // {} 自身没有属性,只有一个__proto__ 指向原型对象
修改属性
1 | var obj = {} |
this
this 只有在调用的时候才会明确
1 | var obj = { |
构造函数
构造函数 是专门用来创建对象的。
它的首字母一般都是大写的。
相当于是一个模具
1 | function Student(name, age) { |
对象的分类
内置对象
宿主对象
自定义对象,
对象的遍历
for ... in
循环
1 | var obj = { |
数组遍历
1 | var arr = [1, 3, 5, 7, 9] |
特殊对象
JSON
1 | var json = `{"a": "Hello", "b": "World"}`; |
arguments
1 | function add(x, y, z) { |
题外
如果没有变量能引用这个对象,这个对象就会被回收(即使这个对象能引用别的变量)。如
1 | var obj = { |