对象
对象简介
- 数据类型:
- 原始值
- 数值 Number
- 大整数 BigInt
- 字符串 String
- 布尔值 Boolean
- 空值 Null
- 未定义 Undefined
- 符号 Symbol
- 对象
- 对象是JS中的一种复合数据类型,它相当于一个容器,在对象中可以存储各种不同类型数据
- 对象中可以存储多个各种类型的数据,对象中存储的数据,我们称为属性
- 向对象中添加属性:
- 对象.属性名 = 属性值
- 读取对象中的属性
- 对象.属性名
- 如果读取的是一个对象中没有的属性,不会报错而是undefined
- 修改属性
- 对象.属性名 = 新的属性值
- 删除属性
- delete 对象.属性名
- 原始值只能用来表示一些简单的数据,不能表示复杂数据,比如:现在需要在程序中表示一个人的信息
- 原始值
// 创建对象
let obj = new Object();
let obj2 = Object();
obj.name = "孙悟空";
obj.age = 18;
obj.gender = "男";
console.log(obj); // {name: '孙悟空', age: 18, gender: '男'}
console.log(obj.name); // 孙悟空
对象的属性
- 属性名
- 通常属性名就是一个字符串,所以属性名可以是任何值,没有什么特殊要求,但是如果你的属性名实在太特殊了,不能直接输入,需要使用[]来设置,如 obj["21432sdaf"],虽然如此,但是我们还是强烈建议属性名也按照标识符的规范命名
- 也可以使用符号(symbol)作为属性名,来添加属性,获取这种属性时,也必须使用symbol,使用symbol添加的属性,通常是那些不希望被外界访问的属性
- 使用[]去操作属性时,可以使用变量
- 属性值
- 对象的属性值可以是任意的数据类型,也可以是一个对象
- 使用typeof检查一个对象时,会返回一个object
- in 运算符
- 用来检查对象中是否含有某个属性
- 语法 属性名 in obj
- 如果有返回true,没有返回false
let obj = Object();
obj.name = "孙悟空";
obj["21432sdaf"] = "呵呵"; // 不建议
let mySymbol = Symbol();
obj[mySymbol] = "通过symbol添加的属性";
let str = "address";
obj[str] = "花果山"; // 等价于 obj["address"] = "花果山"
console.log("name" in obj); // true
console.log("haha" in obj); // false
对象的字面量
对象字面量
可以直接用来
{}来创建对象使用
{}所创建的对象,可以直接向对象中添加属性语法:
{
属性名:属性值,
["属性名"]:属性值
}
let mySymbol = Symbol();
let str = "address";
let obj = {
name: "孙悟空",
age: 18,
["gender"]: "男",
[mySymbol]: "特殊的属性",
[str]: "花果山"
};
console.log(typeof obj, obj); // object {name: '孙悟空', age: 18, gender: '男', address: '花果山', Symbol(): '特殊的属性'}
对象的枚举
枚举属性,指将对象中的所有的属性全部获取
for-in语句
语法:
for(let propName in 对象){
语句...
}for-in的循环体会执行多次,有几次就会执行几次,每次执行时,都会将一个属性名赋值给我们所定义的变量
注意:并不是所有的属性都可以枚举,比如 使用符号添加的属性
let obj = {
name: "孙悟空",
age: 18,
gender: "男",
[Symbol()]: "测试属性" // 符号添加的属性是不能枚举
};
for (let propName in obj) {
console.log(typeof propName); // string
console.log(propName, obj[propName]);
}