文章简介
本文为【JavaScript 漫游】专栏的第 004 篇文章,记录 JS 数据类型 object 的重要知识点。
.
运算符和[]
运算符Object.keys
方法delete
命令in
运算符for ... in ...
对象概述
JS 的对象是一组“键值对”(key-value)的集合,是一种无序的复合数据集合。
var obj = {
foo: 'hello',
bar: 'world',
};
:
前的字符串称为键名,:
后的字符串称为键值。如果键名符合标识符的条件,就可以不加引号,否则必须加上引号。
每一个键名,又可以称为属性。属性可以动态创建,不必在对象声明时就指定。
var obj = {};
obj.foo = 123;
obj.foo; // 123
.
运算符和[]
运算符
两种符号都可以用于属性的读取和赋值操作,要注意的是,当属性不符合标识符规范时,必须使用[]
运算符。
var obj = {};
obj.foo = 'hello';
obj['bar'] = 'world';
obj['foo']; // 'hello'
obj.bar; // 'world'
Object.keys 方法
用于查看对象本身的所有属性。
var obj = {
foo: 'hello',
bar: 'world',
};
Object.keys(obj); // ['foo', 'bar']
delete
命令
用于删除对象本身的某个属性,删除成功返回 true,失败返回 false。
var obj = {
foo: 'hello',
bar: 'world',
};
delete obj.foo;
obj.foo; // undefined
删除一个不存在的属性,delete
命令也不会报错,而且返回 true。只有一种情况会返回 false,那就是该属性存在且不得被删除。
一个属性不得被删除是通过属性描述对象设置的,下文的不可遍历同样如此,专栏中后面的文章会进行描述记载。
in
运算符
用于检查对象是否包含某个属性,如果包含返回 true,否则返回 flase。
var obj = {
foo: 'hello',
bar: 'world',
};
'foo' 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