对象
定义
- 无序的数据集合
- 键值对的集合
写法
let obj = {'name':'yesy,'age':18}let obj = new Object({'name':'yesy,'age':18})(正规)console.log({'name':'yesy,'age':18})
注意点
- 键名是字符串,可以包含任何字符串,不是标识符
- 键名的引号一般可以省略,省略之后就必须写标识符
属性
删
delete obj.attr
delete obj[attr]
var obj = {
name:'yesy',
age:18
}
delete obj.age|delete obj[age]
'age' in obj//false
改(写)
//直接赋值
var obj = {age:18,name:'yesy'}
obj.age = 19
obj.['age'] = 19
//批量赋值
Object.assign(obj,{name:'yesy',age:18})
无法通过自身修改共有属性
//通过自定义原型创建对象
var chinese = {hair:'black',skin:'yellow'}
var person = Object.create(chinese,{
name:{value:'yesy'}
})//以chinese为原型创建person
这样 person 的 __proto__就是 chinese对象
查(读)
Object.keys(obj)查看自身所有属性Object.values(obj)查看自身所有属性的值console.dir(obj)查看自身所有属性+公有属性obj.hasOwnProperty('toString')判断一个属性是自身的还是共有的obj.attr|obj['attr']查看某个属性的值
var obj = {
name:'yesy',
age:18
}
Object.keys(obj)//["name", "age"]
Object.values(obj)//["yesy", 18]
Object.entries(obj)
//[Array(2), Array(2)]0: (2) ["name", "yesy"]1: (2) ["age", 18]length: 2__proto__: Array(0)
obj//{name: "yesy", age: 18}
console.dir(obj)//age: 18 name: "yesy" __proto__: Object
obj.hasOwnProperty('toString')//false 不是自身属性
obj.name//yesy
obj['name']//yesy
person.[name]与person.name
?处填写什么使得person所有属性被打印出来
let list = ['name', 'age', 'gender']
let person = {
name:'frank', age:18, gender:'man'}
for(let i = 0; i < list.length; i++){
let name = list[i]
console.log(person__???__)
}
答案:person.[name]
person.[name]是调用name变量;person.name是name字符串
构造函数
可以构造出对象的函数,constructor指向对象本身
new
new做的事情:
- 自动创建新对象
- 自动为新对象关联原型,
yesy.__proto__ === Person.prototype; - 自动将新对象作为
this关键字运行构造函数 - 自动执行构造函数中的代码
- 自动
return this
var yesy = new Person()
graph BT
A[yesy实例]-->|__proto__|B[Person.prptotype对象原型]
C[Person对象]-->|prototype|B
B-->|constructor|C
类
ES6新语法: class
class Rectangle {
constructor(height, width) {
this.height = height;
this.width = width;
}
}