1. 对象
1. 创建对象
// 创建对象
let obj = {...} //字面量创建对象
let obj = new Object ( ); // “构造函数” 的语法
2. 属性
let user = { // 一个对象
name: "John", // 键 "name",值 "John"
age: 30 // 键 "age",值 30
};
// 读取文件的属性:
alert( user.name ); // John
alert( user.age ); // 30
//user['age'] //动态写法
// 属性可以是任何类型
//1. 添加一个布尔型
user.isAdmin = true;
//2. 删除属性 delete
delete user.age;
//3. 多词属性名
let user = {
name: "John",
age: 30,
"likes birds": true // 多词属性名必须加引号
};
方括号
对于多词属性 .不够用
let user = {};
// 设置
user["likes birds"] = true;
// 读取
alert(user["likes birds"]); // true
// 删除
delete user["likes birds"];
//方括号同样提供了一种可以通过任意表达式来获取属性名的方法
let user = {
name: "John",
age: 30
};
let key = prompt("What do you want to know about the user?", "name");
// 访问变量
alert( user[key] ); // John(如果输入 "name")
检查是否存在给定键的属性
let user = { name: "John", age: 30 };
alert( "age" in user ); // true,user.age 存在
alert( "blabla" in user ); // false,user.blabla 不存在。
“for…in” 循环
为了遍历一个对象的所有键(key),可以使用一个特殊形式的循环:for…in。这跟我们在前面学到的 for循环是完全不一样的东西。
for (key in object) {
// 对此对象属性中的每个键执行的代码
}
let user = {
name: "John",
age: 30,
isAdmin: true
};
for (let key in user) {
// keys
alert( key ); // name, age, isAdmin
// 属性键的值
alert( user[key] ); // John, 30, true
}
//同样,我们可以用其他属性名来替代 key。例如 "for(let prop in obj)" 也很常用。
2. 构造函数
构造函数:其实也是函数,只不过构造函数一般用于和new搭配使用,创建对象
1.命名规则
它们的命名以大写字母开头。
它们只能由 “new” 操作符来执行。
当一个函数被使用 new 操作符执行时,它按照以下步骤:
一个新的空对象被创建并分配给 this。
函数体执行。通常它会修改 this,为其添加新的属性。
返回 this 的值。
function User(name) {
// this = {};(隐式创建)
// 添加属性到 this
this.name = name;
this.isAdmin = false;
// return this;(隐式返回)
}
//所以 new User("Jack") 的结果是相同的对象:
let user = {
name: "Jack",
isA