实践篇-—JS对象基本用法
JS对象基本用法
重点
- 声明对象的两种语法
- 如何删除对象的属性
- 如何查看对象的属性
- 如何修改或增加对象的属性
- ‘name’ in obj和obj.hasOwnProperty(‘name’) 的区别
TL;DR
1 | |
对象的声明
键值对
1 | |
★ 不能使用let obj = {x:'andy8421'};,这样得到的key值为字符串x,不是变量x。
- 键名是任意字符组成的字符串,不是标识符
- 引号可以省略。若省略引号,则只能写标识符
- 省略引号,键名仍然是字符串
对象的隐藏属性
JS中每一个对象都有一个隐藏属性(
__proto__)这个隐藏属性储存着共有属性所组成对象的地址
这个共有属性组成的对象叫原型
隐藏属性存储着原型的地址
原型
- 每个对象都有原型
- obj的原型就是一个对象
obj.__proto__存着这个对象的地址- 这个对象(即原型)里有toString/valueOf/constructor等属性(即共有属性)
- 原型里存着对象的共有属性
- 对象的原型也是对象
- 所以对象的原型也由原型
- obj的原型,即
obj.__proto__,为所有对象的原型 - 这个原型包含所有对象的共有属性,是对象的根
- 这个原型也有原型(对象的根的原型),但是值为null。
obj.__proto__.__proto__===null(浏览器查不到这个属性,因为值为null)
- obj的原型,即

图中,#8421和#1024分别指向的就是Object和Array两个原型,它们分别含有toString()和push(),这两个方法并不是obj和arr自身的属性,而是obj和arr两个对象的原型obj.__proto__和arr.__proto__的属性,称为共有属性。
对象属性的增删改查操作
删除对象的属性
1 | |
★ 不能使用obj.key1 = undefined;。它只是将obj的key1值设置为undefined,并不能删除obj的key1属性。
查看对象的属性(读)
in判断对象是否含有某个属性(一般用于判断属性是否被删除):
1 | |
使用in时,前面待判断key值引号不能省,否则表示变量xxx。
证明: 对象的根存在原型,且该原型值为null:
1 | |
查看属性的键值对:
1 | |
判断一个属性是自身属性还是共有属性:
1 | |
★ 不能使用'xxx' in obj;。它只是判断对象是否含有某个属性,不能判断是否为自有属性。
查看单个属性的key值:
1 | |
★ 错误语法:obj[key1];,这表示变量key1,而不是字符串key1。
增加或修改对象的属性(写)
直接赋值:
‘name’ in obj和onj.hasOwnProperty(‘mame’)的区别
1 | |
批量赋值:
1 | |
修改或增加共有属性
- JS默认设定共有属性为只读属性。
- 无法通过对象自身修改或增加共有属性(修改最终指作用于对象本身,不影响原型)
强行修该原型的属性的方法:
1 | |
修改对象原型的方法(修改原型链):
1 | |
版权声明:本文作者为「Andy8421」.本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!