Object唯一复杂类型
定义
无序数据集合+键值对集合
声明
-
let obj={'name':'frank','age':18}
(name不加‘’也行) -
let obj=new Object({'name':'frank','age':18})
-
console.log({'name':'frank','age':18})
属性名
属性名是字符串,不是标识符,没有组成规则 -->''空字符串也行,emoji也行
引号省略,但是他还是字符串;特殊字符不能省,比如中文
属性名例子
1e2转换成数字100变成字符串
1e-2,0xf,.234f同理
let a='xxx'
var obj = {
a:1111
}
属性名是a
let a='xxx'
var obj = {
[a]:1111
}
属性名是xxx 求a值,转换成字符串当做名字
symbol也可以是属性名,迭代时用到,前端不流行迭代,基本不用
原型
对象隐藏属性__proto__
隐藏属性存着原型地址
增删改查
删除
-
delete obj.name
-
delete obj['name']
删除属性name
检查属性是否存在
'name' in obj
(要加‘’,不然当成变量)
查
-
Object.keys(obj) 属性名
-
Object.Values(obj) 属性值
-
obj 属性名+属性值
-
Object.entries(obj) 属性名+属性值
不显示共有属性
查看共有属性
obj.__proto__
(不推荐,不同浏览器名字可以不一样)
conaole.dir(obj)
查看是自身属性/原型属性('name' in obj和obj.hasOwnProperty('name') 的区别)
in 不会区分自身属性/原型属性
obj.hasOwnProperty('name') 自身true 非自身false(包括原型属性)
查看原型的隐藏属性
原型也是对象,有隐藏属性
原型的隐藏属性为空null,对象的根(null不是undefine,说明被人为指定了空)
增,修
有则改,没有则增
赋值
初始化赋值
let obj = {name:'frank'}//初始化赋值
单个属性赋值
obj.name='frank'
批量赋值
Object.assign(obj,{age:18,gender:'man'})
修改原型
不推荐修改原型
-
obj.__proto__.toString = 'xxx'
不推荐 -
window.Object.prototype.toString = 'yyy'
修改原型链
对象和原型之间再加对象
obj.__proto__={name:'frank'}
不推荐用proto,性能低let common={age:18,gender:'man'}
var person = object.creat(common)
推荐使用
var person = object.creat(common,{name:{valule:'frank'}})
这个是person的初始化修改属性,比较麻烦,非初始化修改属性
附加tips
console.log返回undefined