JS 对象基本用法

123 阅读1分钟

声明对象的两种语法

let obj1 = {'name': 'zhangsan', 'age': 18}
let obj2 = new Object({'name': 'lisi', age: 19})
  • 属性名是字符串,不是标识符,可以包含任意字符;
  • 引号可省略,省略后只能按标识符规则命名;
  • 就算省略了,属性名也是字符串,而不是标识符。 注意,属性名会被js自动变成字符串:
let obj = {
    1: 'a',
    3.2: 'b',
    1e2: 'true',
    1e-2: 'true',
    .234: 'true',
    0xFF: 'true'
};
Object.keys(obj) // => ["1", "100", "255", "3.2", "0.01", "0.234"]

如何删除对象的属性

let obj = {'name': 'zhangsan', 'age': 18, 'gender': 'male'}
delete obj.name
delete obj['age']
obj.gender = undefined
// 此时obj为 {gender: undefined}

如何查看对象的属性

Object.keys(obj) // 查看自身所有属性
console.dir(obj) // 查看自身+原型
obj.hasOwnProperty('toString') // 判断属性是自己的还是原型的

如何修改或增加对象的属性

let obj = {name: 'zhangsan'}
obj.name = 'lisi'
obj['name'] = 'wangwu'
obj['na'+'me'] = 'lao8'
let key = 'name'
obj[key] = 'agiao'

Object.assign(obj, {age:18, gender: 'male'})

in 和 .hasOwnProperty() 的区别

in 会顺着原型链逐层回溯,查找是否含有属性,.hasOwnProperty只会在当前层查找属性。

let obj = Object.create({name: 'zhangsan'})
Object.assign(obj, {age: 18})

'toString' in obj // true
obj.hasOwnProperty('toString') // false

'name' in obj // true
obj.hasOwnProperty('name') // false

'age' in obj // true
obj.hasOwnProperty('age') // true