对象

2020-09-07  本文已影响0人  懂会悟

1、delete()

delete方法的作用

删除成功返回true, 删除失败返回false,直接使用delete删除变量返回false.
delete 删除数组元素后,被删除元素替换为undefined,数组长度不变

// 不能删除变量
var a = 1
console.log(delete a)
// false
let b = 2
console.log(delete b)
// false
const c = 3
console.log(delete c)
// false

// 删除数组元素
let array = [1,2,3,4,5,6]
console.log(array.length)
// 6
delete array[2]
console.log(array.length)
// 6
console.log(array)
// [ 1, 2, <1 empty item>, 4, 5, 6 ]
console.log(array[2])
// undefined

// 删除对象属性
const info = { name: 'Tom', age: 18 }
const res = delete info.name
console.log(res)
console.log(info)

2、增加/修改属性

给对象增加一个属性或者修改属性,直接给对象属性名赋值即可,值得注意的是:当使用变量作为key是需要加上[]

// 变量作为key
let key = 'name'
const info = {}
info[key] = 'Tom'
console.log(info)
// { name: 'Tom' }

// 批量增加属性
const obj1 = { name: 'Tom' }
const obj2 = { age: 18 }
const result = Object.assign(obj1, obj2)
console.log(result)

3、删除属性

如上所述删除对象上的某一属性可以使用deletejike


4、查看属性

查看属性有两种方法obj. 或者obj[]

判断对象是否包含某一属性
// in
// getPrototypeOf:获取原型
const info = { name: 'Tom', age: 18 }
const res = 'toString' in info
const resProp = 'toString' in Object.getPrototypeOf(info)
console.log(res)
// true
console.log(resProp)
// true

// hasOwnProperty
const info = { name: 'Tom', age: 18 }
const res = info.hasOwnProperty('toString')
const resProp = Object.getPrototypeOf(info).hasOwnProperty('toString')
console.log(res)
// false
console.log(resProp)
// true

5、判断对象是否为空

// 转为字符串
const info = { name: 'Tom', age: 18 }
const string = JSON.stringify(info)
if (string === '{}') {
  return false
}
// for in循环
const info = { name: 'Tom', age: 18 }
function isEmpty() {
  for (const key in info) {
    return false
  }
  return true
}
console.log(isEmpty())
// getOwnPropertyNames
const info = { name: 'Tom', age: 18 }
const arr = Object.getOwnPropertyNames(info)
console.log(arr.length)
// Object.keys()
const info = { name: 'Tom', age: 18 }
const arr = Object.keys(info)
console.log(arr.length)

6、对象常用方法

1、Object.assign()

Object.assign():用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。返回目标对象

let target = { name: 'Tom', age: 20 }
let source = { work: 'engineer' }
let result = Object.assign(target, source)

console.log(target)
// { name: 'Tom', age: 20, work: 'engineer' }
console.log(source)
// { work: 'engineer' }
console.log(result)
// { name: 'Tom', age: 20, work: 'engineer' }

2、Object.is()

Object.is():用于判断两个值是否相等,包含number、string、Object.返回布尔值

let target = { name: 'Tom', age: 20 }
let source = { work: 'engineer' }
let result = Object.assign(target, source)
console.log(Object.is(target, result))
// true

3、Object.keys()、Object.values()、Object.entries()
let info = { name: 'Tom', age: 18 }
console.log(Object.keys(info))
// [ 'name', 'age' ]
console.log(Object.values(info))
// [ 'Tom', 18 ]
console.log(Object.entries(info))
// [ [ 'name', 'Tom' ], [ 'age', 18 ] ]


4、Object.defineProperty()

给对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象

let obj = {}
let value = 'old'

const res = Object.defineProperty(obj, "attr", {
  get : () => {
    return value
  },
  set : (newValue) => {
    value = newValue
  },
  enumerable : true,
  configurable : true
})

console.log(obj.attr)
obj.attr = 'set new value'


5、Object.defineProperties()

给对象上定义多个新属性,或者修改对象的现有属性, 并返回这个对象

let obj = {}
Object.defineProperties(obj, {
  'property1': {
    value: true,
    writable: true
  },
  'property2': {
    value: 'Hello',
    writable: false
  }
})
console.log(obj.property1)
console.log(obj.property2)

7、属性描述符

属性描述符:描述属性特征的特性。属性描述符的值true/false, 根据特性的不同,可以把属性分成两种类型:数据属性和访问器属性。

常见的属性描述符

要想修改对象的属性必须通过defineProperty、defineProperties

// defineProperty
let person = {}
Object.defineProperty(person, "birth", {
  configurable: false,
  enumerable: false,
  writable: false,
  value: 2000
})
console.log(person.birth)
// 2000
person.birth = 1999
console.log(person.birth)
// 2000

8、和对象属性相关的方法

属性描述符:描述属性特征的特性

  1. getOwnPropertyDescriptor: 返回属性描述
  2. getOwnPropertyNames:返回属性名构成的数组
  3. getPrototypeOf: 返回对象原型
// getOwnPropertyDescriptor
let info = {
  a: 2
}
const res = Object.getOwnPropertyDescriptor( info, "a" )
console.log(res)
// { value: 2, writable: true, enumerable: true, configurable: true }

// getOwnPropertyNames
let info = {
  a: 2
}
const res = Object.getOwnPropertyNames(info)
console.log(res)

// [ 'a' ]
// getPrototypeOf
let info = {
  a: 2
}
const res = Object.getPrototypeOf(info)
console.log(res)

上一篇下一篇

猜你喜欢

热点阅读