对象
所谓对象,就是一种无序的数据集合,由若干个“键值对”(key-value)
构成。
- 键名
- 对象的所有键名都是字符串,所以加不加引号都可以。
- 如果键名是数值,会被自动转为字符串。 例如:
let o ={
1: 'a', // 1: "a",
3.2: 'b', // 3.2: "b",
1e2: true, // 100: true,
1e-2: true, // 0.01: true,
.234: true, // 0.234: true,
0xFF: true // 255: true
};
复制代码
- 键名不符合标识名的条件,必须加引号。 例如:
let o = {
'1p': "Hello World",
'h w': "Hello World",
'p+q': "Hello World"
};
复制代码
- JavaScript的保留字可以不加引号当作键名。
var obj = {
for: 1,
class: 2
};
复制代码
- 属性
对象的每一个
键名
又称为属性
(property),它的“键值”可以是任何数据类型。如果一个属性的值为函数,通常把这个属性称为“方法”,它可以像函数那样调用。
let o = {
p: function (x) {
return 2 * x;
}
};
o.p(1)
// 2
复制代码
声明对象
- 三种方式
- var obj = {p1 : 'name'}
- let obj = {p1 : 'name'}
- const obj = {p1 : 'name'}
- 区别
var
不建议使用,已过时let
声明时,可赋值也可不赋值。一般用于变量声明。const
声明时要赋值。一般用于常量声明。
let
声明规则
- 遵循作用域,使用范围不超出{}
- 不能重复声明(同一作用域)
- 必须声明再使用,否则报错
- 全局声明的let变量不会变成window的属性
- 可赋值也可不赋值
const
声明规则
- 与let几乎一样
- 声明时要赋值,且赋值后不能更改,一般用于常量声明
查看属性
Object.keys(obj2)
Object.values(obj2)
Object.entries(obj2)
查看key&value
查看自身属性和共有属性
console.dir(obj2)
'toString in obj2'
不会区分是自身属性还是共有属性obj.hasOwnProperty('toString')
判断改属性是否是自身属性,JS中唯一不会遍历原型链的方法
删除属性
delete
命令用于删除对象的属性,删除成功后返回true
。
let o = {p: 1};
Object.keys(o) // ["p"]
delete o.p // true
o.p // undefined
Object.keys(o) // []
复制代码
- 删除一个不存在的属性,
delete
不报错,而且返回true
。
let o = {};
delete o.p // true
复制代码
delete
命令不能删除var
命令声明的变量,只能用来删除属性
。
let p = 1;
delete p // false
delete window.p // false
复制代码
修改、增加对象属性
- 直接赋值
let obj2 = {name: 'jwoong'}
obj2.name = 'linda'
obj2['name'] = 'louys'
obj2['na'+'me'] = 'ADA'
let key = 'name';
obj[key] = 'frank'
复制代码
-
批量赋值
Object.assign(obj3,{age:18, gender:'man'})
-
修改对象的原型
- 不推荐使用
__proto__
let obj = {name:'jwoong'}
let common = {kind:'human'}
obj.__proto__ = common
复制代码
- 推荐使用
Object.create
let obj = Object.create(common) //一创建就指定原型
obj.name = 'frank'
复制代码