- 可以用 delete 操作符移除属性:
delete user.age;
- 也可以用多字词语来作为属性名,但必须给它们加上引号:
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 key = "likes birds";
// 跟 user["likes birds"] = true; 一样
user[key] = true;
- 点符号不能以类似的方式使用:
let user = {
name: "John",
age: 30
};
let key = "name";
alert( user.key ) // undefined
- 列表中的最后一个属性应以逗号结尾:
let user = {
name: "John",
age: 30,
}
这叫做尾随(trailing)或悬挂(hanging)逗号。这样便于我们添加、删除和移动属性,因为所有的行都是相似的。
- 用 const 声明的对象 能 被修改。
const user = {
name: "John"
};
user.name = "Pete"; // (*)
alert(user.name); // Pete
- 当创建一个对象时,我们可以在对象字面量中使用方括号。这叫做 计算属性。例如:
let fruit = prompt("Which fruit to buy?", "apple");
let bag = {
[fruit]: 5, // 属性名是从 fruit 变量中得到的
};
alert( bag.apple ); // 5 如果 fruit="apple"
- 对象的属性名并不受不能是编程语言的某个保留字,如 “for”、“let”、“return” 等限制:
// 这些属性都没问题
let obj = {
for: 1,
let: 2,
return: 3
};
alert( obj.for + obj.let + obj.return ); // 6
let obj = {};
obj.__proto__ = 5; // 分配一个数字
alert(obj.__proto__); // [object Object] — 值为对象,与预期结果不同
我们从代码中可以看出来,把它赋值为 5
的操作被忽略了。
- 在实际开发中,我们通常用已存在的变量当做属性名。
function makeUser(name, age) {
return {
name, // 与 name: name 相同
age, // 与 age: age 相同
// ...
};
}
- 我们可以使用 in 操作符来测试对象属性是否存在
let user = { name: "John", age: 30 };
alert( "age" in user ); // true,user.age 存在
alert( "blabla" in user ); // false,user.blabla 不存在。
- 可以使用一个特殊形式的循环:
for..in
来遍历一个对象的所有键(key),例如,让我们列出user
所有的属性:
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
}
- 对象的属性有特别的顺序:整数属性会被进行排序,其他属性则按照创建的顺序显示。详情如下:
例如,让我们考虑一个带有电话号码的对象:
let codes = {
"49": "Germany",
"41": "Switzerland",
"44": "Great Britain",
// ..,
"1": "USA"
};
for(let code in codes) {
alert(code); // 1, 41, 44, 49
}
- 我们可以使用非整数属性名来 欺骗 程序。只需要给每个键名加一个加号
"+"
前缀,这样就可以保持定义时的顺序。
let codes = {
"+49": "Germany",
"+41": "Switzerland",
"+44": "Great Britain",
// ..,
"+1": "USA"
};
for (let code in codes) {
alert( +code ); // 49, 41, 44, 1
}
- 我们可以使用Object.assign(dest,[src1,src2...])来进行对象的浅克隆与合并
let user = { name: "John" };
let permissions1 = { canView: true };
let permissions2 = { canEdit: true };
// 将 permissions1 和 permissions2 中的所有属性都拷贝到 user 中
Object.assign(user, permissions1, permissions2);
// 现在 user = { name: "John", canView: true, canEdit: true }
坚持写文章是一种好习惯习惯,如果您觉得对你有帮助,记得点赞收藏关注哟,我会不定期分享更多javascript相关的知识点
网友评论