JS 对象基本用法

213 阅读2分钟

1. JS对象

  • JS对象的定义:无序的数据集合;键值对的集合。
  • 写法:
// 第一种写法
let obj = {
    'name' : 'Tony' , 'age' : 18
}

// 第二种写法
let obj = new Object ({
    'name' : 'Tony' , 'age' : 18
})

// 第三种写法,这种写法不加console.log的话,他只是一个label标签,不是对象
console.log({
    'name' : 'Tony' , 'age' : 18
})
  • 注意:键名/属性名 是String,不是标识符,它可以包含任何字符
let obj = {
    2 : '222'
}
Object.keys(obj)
//['2']
let a = 'xxx'
let obj = {
    a : 'yyy' 
}

// a === 'xxx'

/* 
obj
{a: "yyy"}
*/

// 其中 a = 'xxx' 的 a 是变量
// obj 中的 a 是 string
let obj = {
    1e2 : '一百'
}

/*
obj
{100: "一百"}
*/

当我们想让键名是变量时,可以使用 []

let a = 1
let obj = {
    [a] : 'a是1'
}

/*
obj
{1: "a是1"}

Object.keys(obj)
["1"]
*/

2. 声明对象的两种语法

  • let

let 声明 规则

声明的使用范围不能超过{}

{} 中不能重复声明

可以赋值,也可以不赋值

必须先声明再使用

全局声明的let, 不会变成window的属性

配合for循环循环时有奇效

例如

for (let i = 0 ; i < 5 ; i++){
    setTimeout(() => {
        console.log(i)
    })
}

复制代码在使用 var 时,会返回 5 个 5

使用let时, 则会返回 0 1 2 3 4

  • const

const声明规则

与 let 相同,但 const 赋值时就必须声明


3. 对象的删除

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

delete obj.name
  • undefined

这种方法只会删除属性值,不会删除属性名

let obj = {
    'name' : 'tony', 'age' : 18
}

   obj['name'] = undefined
// obj.name = undefined
  • 查看是否删除成功
name in obj // 查看是否存在 name属性名
name in obj && obj.name // 查看是否只是没有属性值

4. 对象的查看

  • 查看所有属性名
Object.keys(obj)
(2) ["name", "age"]
  • 查看所有属性值
Object.values(obj)
(2) ["tony", 18]
  • 查看所有键值
// 方法1
obj

// 方法2
Object.entries(obj)
  • 查看是否有该属性
name in obj
  • 查看该属性是否是自身属性
obj.hasOwnproperty('toString')
  • 查看所有共有属性
console.dir(obj)
  • 查看一个属性名对应的属性值
let obj = {name : 'tony', age: 18}

// 方法1
obj['name']

// 方法2
obj.name

// 下面这种方法的name是变量,不是string
obj[name]

5. 对象的修改

let obj = {name : 'tony', age: 18}

// 方法1
obj['name'] = 'jack'

// 方法2 批量修改
Object.assign( obj , {
    p1 : 1, p2 : 2, p3 : 3
} )

6. 原型的修改

  • 修改共有属性
//方法1(不推荐,会影响性能)
obj.__proto__.toString = 'xxx'

// 方法2
window.Object.prototype.toString = 'yyy'
  • 增加原型链

这种方法会在obj的__proto__指向原型的过程中加上一个 用户自定义的原型,用户自定义的原型 会指向js的原型

// 方法1 (不推荐,影响性能)
obj.__proto__ = 'common'

// 方法2
let obj = Object.create(common)