js Object对象数据类型

  • 可以用 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相关的知识点

你可能感兴趣的:(js Object对象数据类型)