JS 对象基本用法

93 阅读2分钟

JS 对象基本用法

声明对象的两种语法

  • 使用 new 操作符
let obj = new Object();
obj.name = '麻婆豆腐';
obj.age = 18;
// 或
let obj = new Object({'name': '麻婆豆腐', 'age': 18});
  • 使用对象字面量(一种简写形式)
let obj = {};
obj.name = '麻婆豆腐';
obj.age = 18;
// 或
let obj = {
    name: '麻婆豆腐',
    age: 18
}

注意:

  • 键名是字符串,不是标识符,可以包含任意字符
  • 引号可以省略,省略之后只能写标识符
  • 引号省略之后键名仍然是字符串

如何删除对象的属性

let obj = {
    name: '麻婆豆腐',
    age: 18
}

delete obj.name // 删除 obj 的 name 属性
// 或
delete obj['age'] // 删除 obj 的 age 属性
  • 'xxx' in obj === false:可以判断对象不包含该属性名
  • obj.xxx === undefined:不能判断 'xxx' 是否为 obj 的属性,obj 可能不包含 xxx 属性,也可能包含 xxx 属性,但它的值为 undefined
  • 'xxx' in obj && obj.xxx === undefined:可以判断对象包含该属性,且值为 undefined

如何查看对象的属性

查看属性

  • 点语法:obj.xxx
  • 中括号语法:obj['xxx'],注意中括号内的属性名必须加上引号表示字符串,否则意义就是代表一个变量 xxx

查看所有属性

  • Object.keys(obj):该方法返回一个由 obj 对象的所有键组成的数组
  • console.dir(obj):在控制台打印出所有自身属性和原型中的共有属性

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

直接赋值

  • let obj = {'name': '麻婆豆腐'}
  • obj.name = '麻婆豆腐'
  • obj.['name'] = '麻婆豆腐'

批量赋值

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

该方法接受两个参数,分别是目标对象 obj 和 源对象 {age: 18, gender: '川菜'},然后将源对象的自有属性全部复制到目标对象,再返回目标对象。

修改或增加原型上的共有属性(不推荐修改)

  • obj.__proto__.toString = 'xxx'(不推荐)
  • Object.prototype.toString = 'xxx'

修改隐藏属性 __proto__

  • obj.__proto__ = common(不推荐)
  • Object.create(common):该方法将会以 common 对象为原型(prototype)创建一个新的对象

'name' in objobj.hasOwnProperty('name')的区别

'name' in obj只能判断对象 obj 是否有 name 属性,但无法判断 name 属性是自有属性还是原型上的共有属性;obj.hasOwnProperty('name')则可以判断 name 属性是否是 obj 的自有属性。

例如:

let obj = {}

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