内容1:声明对象的两种语法
1.通过new关键字创建对象(正规写法)
let obj = new Object ({'name':'frank','age'=18})
//创建对象
let obj = new Object();
// 添加属性(两种写法)
obj.name = "小明";
obj['age']=18;
// 添加方法
obj.sleep = function () {
console.log(this.name + "在睡觉");
};
2.通过字面量创建对象(简单写法)
let obj={'name':'frank','age':18}
还有一种写法:console.log({'name':'frank','age':18})
- 键名是字符串,不是标识符,可以包含任意字符
- 引号可省略,省略之后就只能写标识符
就算引号省略了,键名也还是字符串(重要)
内容2:如何删除对象的属性
1.obj.name=undefined
则显示{name:undefine,age:18}
2.delete obj.name
则显示{age:18}
两者区别:
'name' in obj === false则不含name属性'name' in obj && obj.name === undefined则含有属性名值为undefined
内容3:如何查看对象的属性
1.查看所有属性
Object.keys(obj)(所有属性名,含共有属性)Object.values(obj)(所有属性的值)Object.entries(obj)(显示为数组)console.dir(obj)(显示所有属性,含共有属性)
2.查看自身属性
obj.key(新手优先选择)obj['key']
例1: obj ['na'+'me'] === 'frank'
例2: obj [console.log('name')] === unfefined
因为[console.log('name')]执行打印name操作
例3: obj[name] === undefined
因为JS会先求 [ ] 中表达式的值,在 [ ] 里name是一个变量,值为''(空字符串),可以先给name赋值再查看name
可给name赋值为age:name='age' 再进行obj[name] === 18
obj[name]与obj['name']区别
obj.name等价于obj['name'],即name是一个字符串
obj[name]不等价于obj['name'],前者name是一个变量,后者是字符串
内容4:如何修改或增加对象的属性
1.修改自身属性
obj.name = 'jack' / obj['name'] = 'jack'
2.批量修改属性
object.assign(obj,{age:19,gender:'女'})
添加或修改属性
3.修改共有属性(原型)
Object.prototype.toString='xxx' 所有原型都改为了xxx
4.修改隐藏属性(对象原型)
let common = {name:'ly'}
let obj = Object.create(common)
obj.gender:'nan'后两句和截屏第一行代码一个效果,两种写法
根据以上操作则得到了一条原型链
查看隐藏属性:obj.__proto__ === null 表示没有隐藏属性
依据上面代码则可得到obj.__proto__ === {name='ly'}
内容5:'name' in obj和obj.hasOwnProperty('name') 的区别
key in obj 不能判断出这个属性是自身属性还是共有属性
obj.hasOwnProperty('key') 可以判断出这个属性是自身属性还是共有属性,true则为自身属性