对象的定义
- 无序的数据集合
- 键值对的集合
写法
let obj = {'name':'xiaoming','age':18}
let obj = new Object({'name':'xiaoming','age':18})
注意:
- 键是字符串,不是标识符,键中可以包含任意字符。
- 键的引号可以省略,省略之后只能写标识符,但即便省略引号,键也还是字符串。
如何删除对象的属性
-
删除对象的属性
delete obj.xxx delete obj.['xxx']
如何查看对象的属性
-
查看属性
obj.key //点语法 obj.['key'] //中括号语法 obj.[key] //这是获取对象的变量key值
注意:
obj.name 等价于 obj.['name'](字符串);
obj.name 不等价于 obj.[name](变量值)
[name]这里的name是字符串,不是变量;
-
查看自身所有属性
Object.keys(obj) -
查看自身及共有属性
console.dir(obj)
如何修改或增加对象的属性
直接赋值
let obj ={name:'wang'} //name 是字符串
obj.name='wang' //name 是字符串
obj['name'] = 'wang'
obj[name] = 'wang' //错误的写法,因为name的值不确定
obj['na'+'me'] = 'wang'
let key = 'name'; obj[key] = 'wang'
let key ='name'; obj.key='wang' //错误,因为 obj.key 等价于 Obj['key]
-
批量复制
Object.assign(obj,{age:18,gender:'man'})
-
修改或增加共有属性
无法通过自身修改或增加共有属性
let obj = {}, obj2 = {} //共有 toString 属性
obj.toString = 'xxx' 只会改obj自身属性
obj2.toString 还是在原型上
-
如果要修改或增加原型上的属性
obj.__proto__.toString = 'xxx' //不推荐用,一般不建议修改原型,会引起很多问题 推荐使用: window.Object.prototype.toString = 'yyy'
'name' in obj和obj.hasOwnProperty('name') 的区别
-
in判断的是对象的所有属性,包括对象实例及其原型的属性;
var obj = { name:'fei' } console.log('toString' in obj)//true *: 对象的原型链上存在toString方法,所以in操作不管是不是原型链上,只要存在这个属性,返回的就是true -
hasOwnProperty则是判断对象实例的是否具有某个属性。
var obj = { name:'fei' } console.log(obj.hasOwnProperty('name')) //true console.log(obj.hasOwnProperty('toString')) //false *: 这个方法只是表明实例对象的属性,不包括原型链上的属性。