1.对象
1.js中对象的定义
(1)无序的数据集合
(2)键值对的集合
2.写法
三种写法
let obj = {"name" : "frank" , "age" : 18}let obj = new Object({"name" : "frank" , "age" : 18})console.log({"name" : "frank" , "age" : 18});
3.细节
属性名是字符串,不是标识符。
如果把引号去掉之后,就只能写标识符了。
就算把引号去掉,属性名还是字符串
4.一些奇怪的属性名
let obj = {
1:"a",
3.2:"b",
1e2:"c",
1e-2:"d",
.234:"e",
0xFF:"d"
}
Object.keys(obj)
输出:["1", "100", "255", "3.2", "0.01", "0.234"]
所有属性名都会变成字符串,
输出顺序,我查了一下,根据v8引擎处理属性来看,先输出整数,其他的就比较复杂了
Object.keys(obj)
可以查obj的所有属性名
5.用变量做属性名
let p = "name"
let obj = {[p] : "frank"}
加上[]即可,如果不加,属性名就是字符串p
6.隐藏属性
- JS每个对象都有一个隐藏属性
- 这个隐藏属性储存着共有属性组成的对象的地址
- 这个共有属性组成的对象叫做原型
- 也就是所隐藏属性储存着原型的地址
2.对象的增删改查
1.删除属性
(1)删除obj对象里面的xxx属性
delete obj.xxx
或
delete obj['xxx']
这两种都可以删除原有属性
(2)那么在删除属性之前,怎么查找改对象有没有这个属性呢
'xxx' in obj
如果obj对象含有xxx属性,返回true,反之
obj.xxx === undefined
这个不能判断有没有该属性,有两种可能:没有改属性;又该属性,但值为undefined
(3)判断不含属性名
'xxx' in obj === false
含有属性名,但值为undefined
'xxx' in obj && obj.xxx === undefined
2.查找属性
(1)
查找自身所有属性:
Object.keys(obj)
查找自身和共有的所有属性
console.dir(obj)
查找一个属性是自身的还是共有的,如果是自身的就返回true
obj.hasOwnProperty('toString')
(2)查找单个属性
obj.key
obj['key']
新人推荐使用第二种
3.修改或增加属性
(1)直接赋值
let obj = {name:'frank'}
obj.name = 'frank'
obj['name']='frank'
批量赋值:
Object.assign(obj,{name:'frank',age:18})
(2)修改公共属性
obj.proto.toString = "xxx"
Object.prototype.toString = "xxx"
一般来说,不要修改公共属性
(3)修改隐藏属性
let obj = { name : 'frank' ,age : 18 }
let common = { kind : 'human' }
obj.prototypy = common
不推荐这种写法
let obj = Object.create(common)
Object.assign (obj ,{name : 'frank', age : 18})
先改,在赋值,推荐这种写法
增
基本同上:已有属性则改;没有属性则增。
总结:
删除属性:delete obj.xxx
查看自身所有属性:Object.keys(obj)
查看是否属于自身属性:obj.hasOwnProperty('toString')
批量赋值:Object.assign(obj , {name : 'frank' , age : 18 } )
改变__proto__:let obj = Object . create(commn)
后面这俩是ES6语法