JS属性2019-08-16(1)

属性的读取

  • 读取对象的属性,有两种方法,一种是使用点运算符,还有一种是使用方括号运算符
var obj = {
  p: 'Hello World'
};

obj.p // "Hello World"
obj['p'] // "Hello World"

注意:如果使用方括号运算符,键名必须放在引号里面,否则会被当作变量处理

  • 数字键可以不加引号,因为会自动转成字符串。但是数值键名不能使用点运算符(因为会被当成小数点),只能使用方括号运算符。

属性的赋值

  • 点运算符和方括号运算符,不仅可以用来读取值,还可以用来赋值。
obj.foo = 'Hello';
obj['bar'] = 'World';
  • JavaScript 允许属性的“后绑定”,即可以在任意时刻新增属性,没必要在定义对象的时候,就定义好属性。

属性的查看

  • 查看一个对象本身的所有属性,可以使用Object.keys法。
var obj = {
  key1: 1,
  key2: 2
};

Object.keys(obj);
// ['key1', 'key2']


属性的删除

  • delete命令用于删除对象的属性,删除成功后返回true
var obj = { p: 1 };
Object.keys(obj) // ["p"]

delete obj.p // true
obj.p // undefined
Object.keys(obj) // []
  • 注意,删除一个不存在的属性,delete不报错,而且返回true,只有一种情况,delete命令会返回false,那就是该属性存在,且不得删除。
  • 需要注意的是,delete命令只能删除对象本身的属性,无法删除继承的属性

属性是否存在

  • in运算符用于检查对象是否包含某个属性(注意,检查的是键名,不是键值),如果包含就返回true,否则返回false。它的左边是一个字符串,表示属性名,右边是一个对象
var obj = { p: 1 };
'p' in obj // true
'toString' in obj // true
  • in运算符不能识别哪些属性是对象自身的,哪些是继承的。
    可以使用对象的hasOwnProperty方法判断一下,是否为对象自身的属性。
var obj = {};
if ('toString' in obj) {
  console.log(obj.hasOwnProperty('toString')) // false
}


属性的遍历

  • for...in循环用来遍历一个对象的全部属性。
var obj = {a: 1, b: 2, c: 3};
for (var i in obj) {
  console.log('键名:', i);
  console.log('键值:', obj[i]);
}
// 键名: a
// 键值: 1
// 键名: b
// 键值: 2
// 键名: c
// 键值: 3
  • for...in循环有两个使用注意点。
    1、它遍历的是对象所有可遍历(enumerable)的属性,会跳过不可遍历的属性。
    2、它不仅遍历对象自身的属性,还遍历继承的属性。
    例如:对象都继承了toString属性,但是for...in循环不会遍历到这个属性,因为它默认是“不可遍历”的。
  • 使用for...in的时候,应该结合使用hasOwnProperty方法,在循环内部判断一下,某个属性是否为对象自身的属性。
var person = { name: '老张' };

for (var key in person) {
  if (person.hasOwnProperty(key)) {
    console.log(key);
  }
}
// name


with语句

  • with语句的格式如下:
with (对象) {
  语句;
}
  • 它的作用是操作同一个对象的多个属性时,提供一些书写的方便。
  • 建议不要使用with语句,可以考虑用一个临时变量代替with

你可能感兴趣的:(JS属性2019-08-16(1))