Javascript是一门 面向对象的语言。在Javascript中,除 数字
、字符串
、布尔值
、null
、undefined
之外,其他的值全部为对象。
对象
对象,可以理解为一种数据集合,类似于Java中的Map,由 key-value 方式构成。所以我们不难理解为什么Javascript的基本数据结构中没有Map,因为在大多数使用Map的场景都可以使用对象处理。
对象字面量
最常规的创建对象的方法,是使用 对象字面量
来进行创建。即,用花括号包围的 key-value
来进行对象的定义。
var foo = {
"name" : "tongyao",
"sex" : "male",
"job" : "programmer"
};
JavaScript中自定义的对象(用户定义的本地对象)任何时候都是可变的。内置本地对象的属性也是可变的。你也可以先创建一个空对象,然后在需要时给它添加功能。
对象的属性名可以加引号或者不加引号。但如果属性名本身并非合法的标示符名,则需要添加引号。
对象的引用
Javascript中,对于对象的传递为 引用传递。也就是说,不同变量名指向同一个对象,实际指向了相同的内存地址,对其中任何一个对象的修改,都会引起其他对象引用的改变。
var foo = {};
var bar = foo;
foo.name = "Tom";
console.log(bar.name);// Tom
需要特别说明的是,与对象相对应的是,原始类型的传递采用 值复制 的方式。
对象属性
读取/写入属性
对象的属性,可以通过 .
运算符或者 []
运算符来进行读取。
这两种方法都可以使用,一般来说使用 .
运算符更加直观。如 var myName = student1.name;
。但如果属性的值,是通过变量名进行传递的,则只有在[]
运算符中才可以获得正确的动态值。
function readProperty(propName) {
console.log(foo[propName]);// Tom
console.log(foo.propName);// undefined
}
readProperty(name);
对属性的赋值也是如此,使用以上两种运算符:
var foo = {};
foo.name = "tom";
foo["sex"] = "male";
遍历属性(枚举)
对对象使用 for-in
循环,可以遍历对象的所有属性,也包括从 原型链上继承 的的属性。
如果不想包含从原型链上继承的的属性,需要使用 hasOwnProperty
方法。
如果希望过滤函数,可以使用 typeof
运算符。
删除属性
使用 delete
运算符可以删除对象的属性,如:
delete foo.name;
delete
运算符不会删除原型链中的属性。如果对象中的属性覆盖了原型链中的属性,删除对象属性后,使用原型链的属性。
Object对象
在Javascript中,有一个 Object
对象,其他所有对象都继承自此对象。