对象定义:
- 无序的数据集合
-
声明对象的两种写法
let obj = { 'name': 'jack', 'age': 18}let obj = new Object({ 'name': 'jack', 'age': 18})
注意:1、键名是字符串,不是标识符,可以包含任意字符;2、引号可以省略,省略之后就只能写标识符;3、就算引号省略了,键名也还是字符串。
删除对象属性
语法 : delete obj.xxx 或 delete obj['xxx']
通过以上语法,即可删除obj的xxx属性。
举个例子:
let obj={name:'jack',age:'18'}console.log(obj) //name:"jack",age:"18"delete obj.name //trueconsole.log(obj) //age:"18"
查看对象属性
查看自身所有属性: Object.keys(obj)
来个例子:
let obj={name:'jack',age:'18'}console.log(Object.keys(obj))//name,age
查看自身+共有属性 : console.dir(obj)
let obj={name:'jack',age:'18'}console.dir(obj)
打印的结果如下
查看特定属性
来个例子:
let obj={name:'jack',age:'18'}console.log(obj['name'])//jackconsole.log(obj.age)//18
两种方法查看属性:
- 中括号语法:
obj['key'] - 点语法:
obj.key//注意:这里的key还是字符串形式。 - 坑人语法:
obj[key]//变量key值一般不为’key’
特别注意 :
obj.name等价于obj['name']obj.name不等价于obj[name]//这里的name是字符串,而不是变量;obj[name]里的name代表变量。let name='jack'修改或增加属性
如若要修改,直接赋值就好了,如以下代码中name的值想要修改为ross,可以这样修改:
obj.name='ross'let obj={name:'jack',age:'18'}console.log(obj) //name:"jack",age:"18"obj.name='ross'console.log(obj) //name:"ross",age:"18"
批量赋值:
Object.assign(obj,{gender:'man',hobby:'running'})
上代码:let obj={name:'jack',age:'18'}console.log(obj) //name:"jack",age:"18"Object.assign(obj,{gender:'man',hobby:'running'})console.log(obj) //name:"jack",age:"18",gender:'man',hobby:'running'
in和hasOwnProperty的区别
区别 :
in 属性用来判断对象拥有的自身属性和共有属性,但是,不能区别该属性来自自身还是共有属性
- hasOwnProperty用于判断对象是否来自自身属性,是自身属性返回true,否则返回false
上代码:
let obj={name:'jack',age:'18'}console.log('name' in obj) //trueconsole.log('toString' in obj)//trueconsole.log(obj.hasOwnProperty('name'))//trueconsole.log(obj.hasOwnProperty('toString'))//false
解析:
name 是自身拥有的属性,所以,用in和hasOwnproperty检测都为true
toString是公共属性,in能检测出来,所以结果为true;toString用hasOwnProperty检测为false,因为 hasOwnProperty只检测自身的属性,所以为false。
