对象定义:

  • 无序的数据集合
  • 键值对的集合

    声明对象的两种写法

  • let obj = { 'name': 'jack', 'age': 18}

  • let obj = new Object({ 'name': 'jack', 'age': 18})

注意:1、键名是字符串,不是标识符,可以包含任意字符;2、引号可以省略,省略之后就只能写标识符;3、就算引号省略了,键名也还是字符串。

删除对象属性

语法 : delete obj.xxxdelete obj['xxx']
通过以上语法,即可删除obj的xxx属性。
举个例子:

  1. let obj={
  2. name:'jack',
  3. age:'18'
  4. }
  5. console.log(obj) //name:"jack",age:"18"
  6. delete obj.name //true
  7. console.log(obj) //age:"18"

查看对象属性

查看自身所有属性: Object.keys(obj)
来个例子:

  1. let obj={
  2. name:'jack',
  3. age:'18'
  4. }
  5. console.log(Object.keys(obj))//name,age

查看自身+共有属性 : console.dir(obj)

  1. let obj={
  2. name:'jack',
  3. age:'18'
  4. }
  5. console.dir(obj)

打印的结果如下
image.png
查看特定属性
来个例子:

  1. let obj={
  2. name:'jack',
  3. age:'18'
  4. }
  5. console.log(obj['name'])//jack
  6. console.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'

    obj[name]等价于obj['jack']

    修改或增加属性

    如若要修改,直接赋值就好了,如以下代码中name的值想要修改为ross,可以这样修改: obj.name='ross'

    1. let obj={
    2. name:'jack',
    3. age:'18'
    4. }
    5. console.log(obj) //name:"jack",age:"18"
    6. obj.name='ross'
    7. console.log(obj) //name:"ross",age:"18"

    批量赋值: Object.assign(obj,{gender:'man',hobby:'running'})
    上代码:

    1. let obj={
    2. name:'jack',
    3. age:'18'
    4. }
    5. console.log(obj) //name:"jack",age:"18"
    6. Object.assign(obj,{gender:'man',hobby:'running'})
    7. console.log(obj) //name:"jack",age:"18",gender:'man',hobby:'running'

    in和hasOwnProperty的区别

    区别 :

  • in 属性用来判断对象拥有的自身属性和共有属性,但是,不能区别该属性来自自身还是共有属性

  • hasOwnProperty用于判断对象是否来自自身属性,是自身属性返回true,否则返回false

上代码:

  1. let obj={
  2. name:'jack',
  3. age:'18'
  4. }
  5. console.log('name' in obj) //true
  6. console.log('toString' in obj)//true
  7. console.log(obj.hasOwnProperty('name'))//true
  8. console.log(obj.hasOwnProperty('toString'))//false

解析:
name 是自身拥有的属性,所以,用in和hasOwnproperty检测都为true
toString是公共属性,in能检测出来,所以结果为true;toString用hasOwnProperty检测为false,因为 hasOwnProperty只检测自身的属性,所以为false。