声明对象的两种语法
含义
JavaScript 对象是拥有属性和方法的数据。例如现实生活中的汽车是一个对象,他的颜色、重量是他的属性,而方法有启动和停止等。对象就是无序的数据集合和键值对的集合。
写法
//字面量方式
let obj = {'name': 'xiaozhang', 'age': 24 }
//系统构造函数方式
let obj1 = new Object({'name': 'xiaozhang'})
tips:
- 键名是字符串,不是标识符,是可以包含任何字符的。例如
name和age就是字符串形式的 - 引号可以省略,省略之后就只能写标识符形式的 需要注意的是即使引号省略了,键名也是字符串。
如何删除对象的属性
删除对象的属性的方法是:
delete obj.xxx
delete obj['xxx']
上面两种方式可以将对象的属性进行删除操作,但是需要注意的是属性值是undefined和不含属性名的。
区分:
- 不含属性名的
可以使用
in进行判断
'xxx' in obj === false - 含有属性名,但是值是
undefined'xxx' in obj && obj.xxx === undefined
注意obj.xxx === undefined不能断定'xxx'是否为obj的属性 例如
> let obj = {}
< undefined
> let obj2 = {'xxx': undefined }
< undefined
> obj.xxx === undefined
< true
> obj2.xxx === undefined
< true
//此时我们可以看到是无法进行断定xxx是否是obj的属性的
如何查看对象的属性
//查看自身所有属性
Object.Keys(obj)
//查看自身+共有属性
console.dir(obj)
或者自己依次用 Object.keys 打印出 obj.__proto__
//判断一个属性是自身的还是共有的
obj.hasOwnProperty('toString')
如何修改或增加对象的属性
let obj = {'name': 'xiaozhang'}
//直接修改
obj.name = 'zhang'
obj['name'] = 'zhang'
//变量的方式修改
let key = 'name'
obj[key] = 'xiaozhang'
//此时obj[key]中的key指的是变量。obj.name 等价于obj['name'],此时的name是字符串。obj.name是不等价于obj[name]。在上面中,obj[key]是等价于obj['name']的。
//批量赋值
Object.assign(obj, {age: 18, gender: 'man'}
'name' in obj和obj.hasOwnProperty('name') 的区别
- 'name' in obj不会区分这个属性是自身的还是共有属性
- obj.hasOwnProperty('name')可以区分。 使用obj.hasOwnProperty('name')的时候是可以进行区分的:
- 当返回值是false时表示就是共有的属性
- 当返回值是true的时候表示是自己的属性