JS对象基本用法

213 阅读2分钟

什么是对象?

什么是对象?简单说,对象就是一组“键值对”(key-value)的集合,是一种无序的复合数据集合。

let obj = {
	name: "yeah",
	song: "mbti"
};

上面代码中,大括号就定义了一个对象,它被赋值给变量obj,所以变量obj就指向一个对象。该对象内部包含两个键值对(又称为两个“成员”),第一个键值对是name: "yeah",其中name是“键名”(成员的名称),字符串yeah是“键值”(成员的值)。键名与键值之间用冒号分隔。第二个键值对是song: "mbti"song是键名,mbti是键值。两个键值对之间用逗号分隔

注意: 对象的所有键名都是字符串,加不加引号都可以,就算引号省略了,键名也还是字符串。

声明对象的两种方法

  • 简便写法
let student = {
    'name': 'Harry',
    'age': 12
};
  • 正规写法
let student = new Object({'name': 'Harry'});

删除对象的属性

  • delete命令用于删除对象的属性,删除成功后返回true
  • delete obj.xxx
  • delete obj['xxx']
  • 要区分“属性值为undefined” 和 “不含属性名”
    • obj.xxx === undefined 不能用来判断该对象不含有xxx的属性名, 比如在var obj2 = {age: undefined}中,obj2.age === undefinedtrue,但此时obj2这个对象含有age属性名。
    • 判断对象中不含属性名,应该用'xxx' in obj来判断。例如上面栗子中,'age' in obj2返回值为true
    • 没有就是没有,undefined就是undefined。
  • 注意,删除一个不存在的属性,delete不报错,而且返回true
  • 举个例子:
var obj = { p: 1 };
Object.keys(obj) // ["p"]

delete obj.p // true
obj.p // undefined
Object.keys(obj) // []

查看对象的属性(属性的读取)

  • 查看对象自身所有属性: Object.keys(obj)
  • 查看自身+共有属性:console.dir(obj)
  • 判断一个属性是自身的还是共有的:obj.hasOwnProperty('xxx')
  • 查看某一个属性:
    • 中括号语法:obj['key']
    • 点运算符语法:obj.key
    • 注意:obj['name']等价于obj.nameobj[name]不等价于obj.nameobj.name里的name是字符串,而不是变量。所以,如果使用方括号运算符,键名必须放在引号里面,否则会被当作变量处理。
  • 举个栗子
var foo = 'bar';

var obj = {
    foo: 1,
    bar: 2
};

obj.foo  // 1
obj[foo]  // 2

修改或增加对象的属性

  • 直接赋值:点运算符和方括号运算符,不仅可以用来读取值,还可以用来赋值。
var obj = {};

obj.foo = 'Hello';
obj['bar'] = 'World';
    
//方括号运算符内部还可以使用表达式。
obj['na' + 'name'] = 'Harry';
  • 批量赋值:Object.assign(obj, {age: 18, gender: 'female'})

'name' in obj 和 obj.hasOwnProperty('name') 的区别

'name' in obj 仅能判断对象是否拥有该属性,不能判断该属性是自身的还是与原型共有的。obj.hasOwnProperty('name')可以判断一个属性是否是自身的。

let car = { brand: "BMW", color: "Black" };

'age' in car //false
'color' in car //true

'toString' in car //true
car.hasOwnProperty("toString") //false
car.hasOwnProperty("brand") //true

推荐阅读