声明对象的两种语法
1.
let obj={'name':'summercoming8','age':16}
2.
let obj=new Object({'name':'summercoming8'})
属性名
键名,也就是属性名,是字符串!是字符串!是字符串!
这个键名的引号是可以省略掉的,「但是省略之后键名仍然是字符串」并且命名就必须符合标识符的命名规范。而在使用引号时,甚至可以取出像'2'、'国家'这样的键名。可以通过Object.keys(obj)
来查看obj对象存在的属性名。
//在chrome进行调试
var obj={name:'666',age:'18'}
obj//{name: "666", age: "18"}
Object.keys(obj)//(2) ["name", "age"]
//可以看到当用keys打出来的时候还是自动给键名包上了引号,而单单打出obj的时候不会自动加上
所有属性名会自动变成字符串
let obj={
1:'a',
1.1:'a',
1e2:'a',
.234:'a',
0xFF:'a',
}
Object.keys(obj)//(5) ["1", "100", "255", "1.1", "0.234"]
//科学记数法、16进制、小数等都会先转为相应的数字再转为字符串
当属性名要变量
加[]:加了[]会被当作变量求值,变量值如果不是字符串,也会被自动转为字符串
let p='name'
let obj={p:'666'}
Object.keys(obj)//["p"]
let obj1={[p]:'666'}
Object.keys(obj1)//["name"]
对象对属性的增删改查
如何删除对象的属性
delete obj.xxx
delete obj['xxx']
注意:加引号,不然会去找名为xxx的变量的值是啥 ps:如果删除本来就没有的属性,并不会报错
如何查看对象的属性
查看所有属性
- 查看自身所有属性:
Object.keys(obj)
- 查看自身+共有属性
console.dir(obj)
- 查看是不是自身的属性
obj.hasOwnProperty(obj)
查看属性
obj['key']
obj.key
如何修改或增加对象的属性(写)
-
直接赋值
obj.name = '666'
这个name是字符串obj['name']='666'
2.批量赋值Object.assign(obj,{......})
-
Object.defineProperties(obj, props)
var obj = {};
Object.defineProperties(obj, {
'property1': {
value: true,
writable: true
},
'property2': {
value: 'Hello',
writable: false
}
obj// {property1: true, property2: "Hello"}
});
修改涉及到共有属性(共有属性组成的对象是原型)
对象无法通过自身对共有属性进行修改和增加
(倘若一定要去改共有属性,就是每个对象都有的__proto__
里的东西):
obj.__proto__.toString='xxx'
(不建议)Object.prototype.toString='xxx'
修改涉及到隐藏属性
let obj = {name:'小明'}
let obj2 = {name: '小红'}
let common = {kind: 'human'}
obj.__proto__ = common
obj2.__proto__ = common//于是小明和小红都有了人类的共有属性(不推荐)
let obj = Object.create(common)
obj.name = 'frank'
let obj2 = Object.create(common)
obj2.name = 'jack'
//要改一开始就给改改好比较好
'name' in obj和obj.hasOwnProperty('name') 的区别
in是查看自身和继承对象的是否有某属性的,hasOwnProperty是查看对象自身是否有某项属性的