声明对象的两种语法
let obj = { 'name' : 'frank' , 'age' : 18} //以下是简写写法
let obj = new Object ({ 'name' : 'frank'}) //以下是规范写法
一些特殊的属性名:所有的属性名会自动变成字符串。(如果不想发生下面的事情,在属性名上加'')
let obj = {
1: true, // 1 --> '1'
3.2: true, // 3.2 --> '3.2'
1e2: true, // 1e2 --> '100'
1e-2: true, // 1e-2 --> '0.01'
.234: true, // .234 --> '0.234'
0xFF: true // 0xFF --> '255'
}
注意:
- 对象都是以键值对的形式出现
- 键名是字符串,不是标识符,可以包含任意字符串
- 引号可以省略,省略之后只能按标识符的规则写(数字除外)
- 就算引号省略了,键名也还是字符串
- 当键名有空格,中文等特殊符号是,必须加引号,否则会出错
- 没有数字键名,也没有数字下标,因为浏览器会自动把数字转换成字符串
如何删除对象的属性
-
delete obj.xxx 或 delete obj['xxx']
即可删除 obj 的 xxx 属性
-
区分「属性值为 undefined」和「不含属性名」
-
不含属性名
'xxx' in obj === false-
含有属性名,但是值为 undefined
'xxx' in obj && obj.xxx === undefined -
注意 obj.xxx === undefined不能断定 'xxx' 是否为 obj 的属性
如何查看对象的属性
-
查看自身所有属性
Object.keys(obj)
-
查看自身+共有属性
console.dir(obj)
或者自己依次用 Object.keys 打印出 obj.proto
-
判断一个属性是自身的还是共有的
obj.hasOwnProperty('toString')
如何修改或增加对象的属性
-
单个赋值
obj['color']="red"
-
批量赋值 Object.assign
Object.assign (obj,{a:1,b:2})
-
修改自身里的共有属性(toString) obj
obj.toString
obj.__proto__ = null
-
修改大家的共有属性(toString) obj/Object.prototype
obj.__proto__.toString
Object.prototype.toString
-
创建自己的原型(就可以不用去修改原来的原型了)Object.create
var common = {'国籍':'中国'}
var person = Object.create(common)
'name' in obj和obj.hasOwnProperty('name') 的区别
- 'xxx' in obj 是查看xxx是否是obj这个对象的属性 返回turn(是) 返回false(不是);但是无法区分这个属性是自身的还是原型共有的所以推荐用下面的。
- obj.hasOunProperty('xxx') 如果返回false就说明不是他自身的。