写法
// 第一种
let obj = {'name': 'du','age' :'18'}
// 第二种
let obj = new Object({'name':'du'})
细节
- 键名是字符串,不是标识符,可以包含任意字符
- 引号可省略,省略之后就只能写标识符
- 就算引号省略了,键名也还是字符串(重要)
删除对象属性
//删除属性
delete obj.xxx
或delete obj['xxx']
//不含属性名
'xxx' in obj === false
- 都表示删除obj的xxx属性
- obj.xxx === undefined 不能断定 'xxx' 是否为 obj 的属性
查看对象的属性
Object.keys(obj) 查看所有属性
console.dir(obj) 查看自身+共有属性
obj.hasOwnProperty('toString') 判断一个属性是自身的还是共有的
- 两种方法查看属性
- 中括号语法:
obj['key'] - 点语法:
obj.key这里的key是字符串
obj[key] 中的key为变量
for in 遍历对象
var obj = { name: 'Jack', age: 18 }; for (var k in obj) { console.log(k);//k是变量 、输出,得到的是属性名 console.log(obj[k]);//obj[k]得到的是属性值 }
修改或增加属性
-
直接赋值
let obj = {name: 'frank'} // name 是字符串 obj.name= 'frank' // name 是字符串 obj['name']= 'frank'
obj[name]= 'frank'// 错,因 name 值不确定
obj['na'+'me']= 'frank'
let key = 'name'; obj[key] = 'frank'
let key = 'name';obj.key= 'frank'// 错,因为 obj.key 等价于 obj['key']
-
批量赋值
Object.assign(obj,{age: 18, gender: 'man'})
-
无法通过自身修改或增加共有属性,可以使用
obj.__proto__.toString = 'xxx'来修改,但不推荐,会引起许多问题。 -
修改隐藏属性
let common = {kind: 'human'} let obj = Object.create(common)
obj中的原型属性有common,并且依然有__proto__
- 八种数据类型:number string undefined null bool symbol object bigint
- 五种falsy值 : undefinde null 0 NaN ''(空字符串)