Object对象
定义
无序的数据的集合,键值对的集合
语法
let obj={'name':'yongying','age':18}
let obj=new Object({'name:'yongying})
console.log({'name':'yongying',age:18})
细节
-
键 名是字符串,不是标识符,包含任意字符
-
可以省略,省略后就只能写标识符
-
引号省略了,键名也还是字符串(重要)
奇怪的属性名
所有的属性名会自动变成字符串
let obj={
1:'a'
3.2:'b'
1e2:ture
1e-2:ture
.234:ture
OXFF:ture
};
Object.key(Obj)可以得到obj的所有key
Object.keys(obj)
=>['1','100','255','3.2','0.01','0.234']
变量作属性名
let p1='name'
let obj={p1:'sss'}这样写,属性名为'p1'
let obj={[p1]:'sss'}这样写,属性名为'name'
对比
-
不加[]的属性名会自动变成字符串
-
加了[]的则会当做变量求值
-
值如果不是字符串,则会自动变成字符串
let a='xxx'
var objo={
'a':111
}
得到结果{a:111}
用变量的值作Key
var obj={
[a]:111
}
结果{xxx:111}
对象的隐藏属性
隐藏属性 JS中的每一个对象都有一个隐藏属性
这个隐藏属性存贮着共有属性组成的对象的地址
这个共有属性存贮着原型的地址
代码示例
var Obj={}
obj.toString()//不报错
不报错是因为obj的隐藏属性对象上有toString()
增删改查
删
下面代码可以删除xxx的属性名与属性值
delete obj.xxx
delete obj['xxx']
下面只删除属性值
obj.name=undefined
不含属性名
'xxx'in obj==false
不含属性名
'xxx' in obj && obj.xxx ===undefined
含属性名但值为undefined
'xxx' in obj &&& obj.xxx===undefined
obj.xxx===undefined
不能断定'xxx'是否为obj的属性
查看是否删除了
看返回值false 已经不在了,ture 表示存在
'name'in obj
查
看自身所有属性
Object.keys(obj)
查看自身共有属性
console.dir(obj)
Object.keys 打印出obj._proto_
判断一个属性是自身的还是共有的
Obj.hasOwnProperty('toString')
###两种方法看属性 中括号法:obj['key'] 点语法:obj.key
## 修改或增加属性
直接赋值
```javascript
let obj={name:'a'} //name是字符串
obj.name ='a' //name是字符串
obj['name']='a'
obj['na'+'me']='a'
let key='name';obj[key]='frank'
let key='name';
批量赋值
object.assign(obj,{age:18,gender:'man'})
修改或增加共有属性
- 无法通过自身修改或增加共有属性
let obj={},obj 2={}//共有toString
obj.toString='xxx'只会改obj自身属性
obj 2.toString还是在原型上
- 偏要在修改或增加原型上的属性
obj.proto.toString='xxx
Object.prototype.toString ='xxx'