总结JS对象的基本用法~
声明对象
两个最基本的声明对象方式:
字面量声明
字面量声明方法是Object构造函数创建对象方法的简写形式
var Student={};
var Student={'name':"moji",'age':21}
Object构造函数创建
var Student = new Object ({ 'name':"moji",'age':21 });
Person.gender = 'female';
- 两种方法的缺点是同一个接口创建很多对象和,会产生大量的重复代码
- 👉更多声明对象的方法 参考博客:JS创建对象的几种方法
属性名和属性值
属性名
-
键名(属性名)是字符串,不是标识符,可以包含任意字符
-
引号可省略,省略之后就只能写标识符,但键名也还是字符串
-
保险情况下要加上引号,比如 属性名为1e2,js会先转化为100,再加上“”,属性名就变为“100”
let obj = { 1: 'a', 3.2: 'b', 1e2: true, 1e-2: true, .234: true, 0xFF: true }; Object.keys(obj) => ["1", "100", "255", "3.2", "0.01", "0.234"]
-
Object.keys(obj) 可以得到 obj 的所有 key
-
属性名新方法:可以用变量做属性名,[a]代表变量a
let p1 = 'name' let obj = { p1 : 'moji'} //属性名为 'p1',不加 [ ] 的属性名会自动变成字符串 let obj = { [p1] : 'moji' } //属性名为 'name',加了 [ ] 则会当做变量求值
隐藏属性
JS 中每一个对象都有一个隐藏属性(__proto__
)储存着共有属性组成的对象(原型)的地址
读属性
读取对象的属性,有两种方法,一种是使用点运算符,还有一种是使用方括号运算符。
object[变量] 方括号中可以放变量,.
点运算符后面的会直接变字符串
var obj = {
p: 'Hello World'
};
obj.p // "Hello World"
obj['p'] // "Hello World"
- 使用方括号运算符,键名必须放在引号里面,否则会被当作变量处理!!!
方法 | 说明 |
---|---|
Object.keys(obj) | 查看自身所有属性名 |
Object.values(obj) | 查看自身所有属性值 |
Object.entries(obj) | 查看自身所有属性名+属性值组成的键值对 |
console.dir(obj) | 查看自身+共有属性 |
写属性
修改或增加属性
直接赋值
点运算符和方括号运算符,不仅可以用来读取值,还可以用来赋值
let obj = {name: 'moji'} // name 是字符串
obj.name = 'moji'
obj['name'] = 'moji' // name 是字符串
obj['na'+'me'] = 'moji'
let key = 'name';
let key = 'name';//obj.key 等价于 obj['key']
obj[key] = 'moji'
批量赋值
使用assign方法
Object.assign(obj, {age: 18, gender: 'female'})
无法通过对象自身来修改或增加共有属性,可以对obj.__proto__.
和Object.prototype
的共有属性赋值来改变(不推荐),推荐使用 Object.create来从创造对象起就指定修改其原型。
删属性
使用delete 命令 ,delete命令用于删除对象的属性,删除成功后返回true
delete obj.xxx
delete obj['xxx']
- 删除一个不存在的属性,
delete
不报错,而且返回true
- 删除后再读取该属性的值为undefined
delete
命令只能删除对象本身的属性,无法删除继承的属性
判断
in 运算符
in
运算符用于检查对象是否包含某个属性(注意,检查的是键名,不是键值),如果包含就返回true
,否则返回false
。它的左边是一个字符串,表示属性名,右边是一个对象。
var obj = {'name' : 'moji' };
'name' in obj // true
'toString' in obj // true
hasOwnProperty()
使用hasOwnProperty判断是否为对象自身的属性,是自身特定的属性返回true,是原型链上的属性返回false
obj.hasOwnProperty('toString') // false
属性的遍历
除了上面说到的Object.keys(obj)、Object.values(obj)、Object.entries(obj)、console.dir(obj),还可以使用for…in循环来遍历对象,得到属性值和属性名
var obj = {'name': 'moji', 'age': 21 };
for (var i in obj) {
console.log('键名:', i);
console.log('键值:', obj[i]);
}
// 键名: name
// 键值: moji
// 键名: age
// 键值: 21
关于数组的遍历,以后再总结~