声明对象的两种语法
写法
let obj ={'name':'frank','age':18}
let obj = new Objec({'name':'frank'})
细节
- 键名是字符串,不是标识符,可以包含任意字符
- 引号可省略,省略之后就只能写标识符
- 就算引号省略了,键名也还是字符串(重要)
删除对象的属性
- 删除 obj 的 xxx 属性
- delete obj.xxx 或 delete obj['xxx']
- 不含属性名
- 'xxx' in obj ==fasle
- 含有属性名,但是值为 undefined
- 'xxx' in obj && obj.xxx === undefined
- 不能断定'xxx'是否为 obj 的属性
- obj.xxx === undefined
查看对象的属性
- 查看自身所有属性
- Object.keys(obj)
- 查看自身+共有属性
- console.dir(obj)
- 查看自身单个属性
- obj['name']
- obj.name //这里name是字符串
- obj[name] //这里name是变量
如何修改或增加对象的属性
- 改自身
- obj['name']='jack'
- 批量改自身
- Object.assign(obj,{age:18,...})
- 改共有属性
- obj.proto['toString']='xxx'
- Object.prototype['toString']='xxx'
- 改原型
- obj.proto=common
- let obj =Object.create(common) 注:所有的__proto__代码都是强烈不推荐写的
- 增
- 基本同上:已有属性则改,没有属性则增
'name' in obj和obj.hasOwnProperty('name') 的区别
- //使用in判断对象中是否由属性时,若自身没有,在原型中找到也是返回true
- //使用hasOwnproperty()判断对象是否含有属性时,只有自身有才返回true example:
var obj={age:18}
obj.__proto__['name']='xxx'
'name' in obj //true
obj.hasOwnProperty('name') //fasle