写代码啦
JS 对象基本用法
回复数(0) 浏览数(34)
{{topic.upvote_count || 0}} 编辑 回复

前几天学习了JS的数据类型。今天重点学习了JS数据类型里最重要也是最复杂的类型——对象。

定义

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

声明对象

那我们怎么声明对象呢?目前有两种方式:
1. let object = {'name': 'lisbeth'}
这就是直接将变量声明成了对象的形式。
2. let object = new Object({'name': 'lisbeth'})
这是使用Object包装器的方式声明一个新对象。

目前声明对象常用的就是这两种方式。

删除对象的属性

那么我们有了对象之后,怎么删除对象的某些属性呢。
1. delete obj.xxx 或者 delete obj['xxx']
删除对象obj的xxx属性。
2. 有人使用obj.xxx = undefined来删除obj的xxx属性,这是不正确的。
这只能将obj对象中的xxx属性的值设置为undefined,并没有将这个属性删除。
3. 所以你并不能使用obj.xxx === undefined来判断对象obj是否含有xxx这个属性

查看对象的属性

上面讲了如何删除属性,那么我们怎么查看对象的属性呢。
1. 查看对象自身的所有属性
- Object.keys(obj)
使用这个命令可以查看到对象自身的属性名。
- Object.values(obj)
使用这个命令可以查看对象自身的属性值。
- Object.entries(obj)
使用这个命令可以同时查看对象自身的键名和属性值。
2. 查看自身加共有属性
- console.dir(obj)
这个命令可以查看obj对象的自身属性以及共有属性。

修改或增加对象的属性

可以查看对象属性之后,又怎么修改或者增加对象的属性呢。
1. 直接赋值
let obj = {name: 'jack'} // name 是字符串
obj.name = 'jack' // name 是字符串
obj['name'] = 'jack'
obj[name] = 'jack' // 这个就错了,因为这里的name是变量
2. 批量赋值
Object.assign(obj, {age: 18, gender: 'man'})
3. 修改属性的时候,我们首先要明白一点,就是。我们无法通过修改或增加自身的属性去达到修改或增加共有属性的目的。举个例子:
let obj = {} let obj2 = {} // 共有toString属性
obj.toString = 'xxx' 只会更改obj自身的属性
obj2.toString还是在它的原型上
4. 那如果我一定要修改原型上的属性呢,我们有两种方式
- obj.__proto__.toString = 'xxx' // 虽然这可以改,但是我们并不推荐这种改法
- obj.prototype.toString = 'xxx'
- 一般来说,我们并不推荐修改原型,会引起很多问题
5. ES6 新出了一种语法可以让我们修改某个对象的原型,举个例子:
let common = {kind: 'human'}
let obj = Object.create(common)
创建完之后,再赋值
obj.name = 'jack'

in 和 hasOwnProperty()的区别

我们知道了一个对象有自身属性和共有属性,那么我们怎么判断这个属性是属于自身属性还是共有属性呢?
1. 如果我们用'name' in object === false来判断
- let obj = {'name': 'xiaomo'}
- 'name' in obj 的值是true
- 'toString' in obj的值也是true
这样就没有办法判断是否是自身属性。
2. 我们可以使用obj.hasOwnProperty('name')来判断
- let obj = {'name': 'xiaomo'}
- obj.hasOwnProperty('name') 的值是true
- obj.hasOwnProperty('toString')的值是false
证明name是自身属性,toString是共有属性。

对对象的初步认识就到这里了,以后继续深入学习后再进行说明。

{{topic.upvote_count || 0}}

前几天学习了JS的数据类型。今天重点学习了JS数据类型里最重要也是最复杂的类型——对象。

定义

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

声明对象

那我们怎么声明对象呢?目前有两种方式:
1. let object = {'name': 'lisbeth'}
这就是直接将变量声明成了对象的形式。
2. let object = new Object({'name': 'lisbeth'})
这是使用Object包装器的方式声明一个新对象。

目前声明对象常用的就是这两种方式。

删除对象的属性

那么我们有了对象之后,怎么删除对象的某些属性呢。
1. delete obj.xxx 或者 delete obj['xxx']
删除对象obj的xxx属性。
2. 有人使用obj.xxx = undefined来删除obj的xxx属性,这是不正确的。
这只能将obj对象中的xxx属性的值设置为undefined,并没有将这个属性删除。
3. 所以你并不能使用obj.xxx === undefined来判断对象obj是否含有xxx这个属性

查看对象的属性

上面讲了如何删除属性,那么我们怎么查看对象的属性呢。
1. 查看对象自身的所有属性
- Object.keys(obj)
使用这个命令可以查看到对象自身的属性名。
- Object.values(obj)
使用这个命令可以查看对象自身的属性值。
- Object.entries(obj)
使用这个命令可以同时查看对象自身的键名和属性值。
2. 查看自身加共有属性
- console.dir(obj)
这个命令可以查看obj对象的自身属性以及共有属性。

修改或增加对象的属性

可以查看对象属性之后,又怎么修改或者增加对象的属性呢。
1. 直接赋值
let obj = {name: 'jack'} // name 是字符串
obj.name = 'jack' // name 是字符串
obj['name'] = 'jack'
obj[name] = 'jack' // 这个就错了,因为这里的name是变量
2. 批量赋值
Object.assign(obj, {age: 18, gender: 'man'})
3. 修改属性的时候,我们首先要明白一点,就是。我们无法通过修改或增加自身的属性去达到修改或增加共有属性的目的。举个例子:
let obj = {} let obj2 = {} // 共有toString属性
obj.toString = 'xxx' 只会更改obj自身的属性
obj2.toString还是在它的原型上
4. 那如果我一定要修改原型上的属性呢,我们有两种方式
- obj.__proto__.toString = 'xxx' // 虽然这可以改,但是我们并不推荐这种改法
- obj.prototype.toString = 'xxx'
- 一般来说,我们并不推荐修改原型,会引起很多问题
5. ES6 新出了一种语法可以让我们修改某个对象的原型,举个例子:
let common = {kind: 'human'}
let obj = Object.create(common)
创建完之后,再赋值
obj.name = 'jack'

in 和 hasOwnProperty()的区别

我们知道了一个对象有自身属性和共有属性,那么我们怎么判断这个属性是属于自身属性还是共有属性呢?
1. 如果我们用'name' in object === false来判断
- let obj = {'name': 'xiaomo'}
- 'name' in obj 的值是true
- 'toString' in obj的值也是true
这样就没有办法判断是否是自身属性。
2. 我们可以使用obj.hasOwnProperty('name')来判断
- let obj = {'name': 'xiaomo'}
- obj.hasOwnProperty('name') 的值是true
- obj.hasOwnProperty('toString')的值是false
证明name是自身属性,toString是共有属性。

对对象的初步认识就到这里了,以后继续深入学习后再进行说明。

34
回复 编辑