1. 声明对象的两种语法
第一种;
let obj = { name: "frank", age: 18 };
第二种;
let obj = new Object({ name: "frank" });
1.1 属性带引号和不带引号的写法
- 引号可以省略,省略之后只能用标识符的写法(全数字除外)
- 就算引号省略了,键名也是字符串。
- 当有空格和特殊字符时必须加引号。
- 没有数字键名和数字下标,因为浏览器会自动将数字转换为字符串。 注意一个细节: 对象的 key 一直、永远都是字符串!键名是字符串!键名是字符串! 标识符是变量的合法命名。可以是任意 Unicode 字母(中文、英文、希腊字母)、下划线_、$符号,不可以数字开头。
1.2 键名是数字
var obj = {
1: 'a',
3.2: 'b',
1e2: true,
1e-2: true,
.234: true,
0xFF: true
};
obj
// Object {
// 1: "a",
// 3.2: "b",
// 100: true,
// 0.01: true,
// 0.234: true,
// 255: true
// }
//查看所有keys**
Object.keys(obj)
obj['100'] // true
如果键名不符合标识名的条件(比如第一个字符为数字,或者含有空格或运算符),且也不是数字,则必须加上引号,否则会报错。
1.3 变量作键名
let p1 = 'name'
let obj = {[p1]:'frank'} //这样写属性名为'name'
- 不加 [] 的键名会自动变成字符串;
- 加了 [] 的键名会被当做变量求值
- 值如果不是字符串,则会自动变成字符串
2.如何删除对象的属性
detele obj.xxx 或者 delete obj['xxx']
3.如何查看对象的属性
3.1 查看所有属性
3.1.1 查看自身所有属性
Object.keys(obj)
3.1.2 查看自身+共有属性
console.dir(obj)
3.1.3 判断一个属性是自身的还有共有的
obj.hasOwnProperty('toString')
3.1.4 key in obj 和 obj.hasOwnProperty('toString')的区别
key in obj 不能判断出这个属性是自身属性还是共有属性obj.hasOwnProperty('key') 可以判断出这个属性是自身属性还是共有属性
3.2 查看单独一个属性
obj.name 等价于 obj["name"] 对象的键名都是字符串!obj[变量名]
4.如何修改或者增加对象的属性
改自身 obj['name'] = 'bob'批量改自己 Object.assign(obj, {age: 18})改原型:let obj = Object.create(common)
5.总结
5.1 删
- delete obj.xxx 或者 delete obj['xxx']
- 通过设置 obj['xxx']=undifined,不能够删除属性
判断对象是否存在属性
- 不含属性名
'xxx' in obj => false
//可判断属性'xxx'是否存在对象obj中
- 含有属性名,但是值为 undefined
'xxx' in obj && obj.xxx === undefined
5.2 查
- 查看属性
obj['key']
obj.key
obj[key] //其中key是变量
<a name="y83AJ"></a>
- 查看自身所有属性
Object.keys(obj)
- 查看自身属性 + 共有属性
console.dir(obj)
- 判断属性是自身还是共有
obj.hasOwnProperty('toString')
- hasOwnProperty 和 'xx' in obj 的区别
'xx' in obj //只能判断'xx'是否是obj的属性(比hasOwnProperty范围广)。
obj.hasOwnProperty('xx') //判断'xx'是自身属性还是原型中的属性
5.3 改
改自身 obj['name'] = 'jack'批量改自身 Object.assign(obj, {age:18, ...})改原型 let obj = Object.create(common)
5.4 原型
每个对象都有原型
原型里面存放着对象的共有属性对象的原型也是对象, 说明这个原型也是所有对象的原型 这个原型也有原型,是 null