JavaScript中简单类型包括:number类型、string类型、undefiend类型、null类型、Boolean类型。其它值都是对象,数组是对象、函数是对象、正则表达式是对象、对象是对象、Date是对象。
对象是属性的容器,其中每个属性都有自己的属性名和属性值。 属性名可以是包含空字符的任意字符, 属性值是除了undefined之外的任意值。对象都有自己的属性和方法。
JavaScript中的对象可以通过原型链来继承其它对象的属性和方法。
创建对象可以使用new关键字后跟一个构造函数Object()来创建,也可以通过对象字面量来创建。对象字面量法就是包围在一对花括号中的0个或多个"名/值"对。
在对象中也可以嵌套对象。如果属性名是合法的标识符而还是保留字,可以不使用双引号包围起来。
对象检索对象的属性,也就是访问对象的属性可以使用[],里面用双引号将要访问的属性名括起来,也可以使用"."后跟属性名来访问。
"[]"方式访问对象一般用于不确定某属性是否是该对象的属性时使用,建议使用圆点来访问对象属性。
更新属性、新添加属性:修改属性值,或新添加属性也使用 圆点。
对象是通过引用来传递的,它们永远不会被复制。也就是说定义一个对象,该对象名就是一个指向对象的引用,该对象名就是一个指针,它指向一个对象。
这样obj1与obj2同时指向一个对象,将obj1中的值(指针)复制给了obj2,那么改变其一个变量,另一个变量也会受到影响。
以上操作是:为obj1变量指向的对象添加一个属性,因为obj2也指向这个对象,所以obj2.name就是obj1变量赋值的值。
每个对象都连接到一个原型对象,可以通过这个原型对象继承其它对象的属性和方法。通过对象字面量创建的对象都会连接到Object.prototype。
当创建一个新对象时,可以选择某个对象作为这个新对象的原型。
可以通过hasOwnProperty()方法来确定某对象是否有某个属性,如果有返回true,反之,返回false。
可以通过for in语句来遍历某对象的所有属性,该方法来枚举出对象的所有属性--包括不可枚举的属性也会被遍历出来。使用for in语句遍历出来的属性是没有顺序的。
所以要避免使用for in语句来遍历对象的属性。可以使用数组的方式,用for循环语句来遍历对象的属性。这样遍历出来的属性的顺序就是属性名在对象中的顺序。
推荐使用for of语句来遍历对象属性更好。
可以使用 delete方法来删除对象的某个属性。
如果该对象是继承了某个对象,那么删除这个属性后,可能会暴露出该对象的原型对象中的这个属性。也就是被继承的对象的属性。
最小化使用全局变量之一:为程序只创建一个全局变量,将全局性的资源容纳到一个名称空间下,就会减少应用程序之间的冲突。
对象是属性的容器,其中每个属性都有自己的属性名和属性值。 属性名可以是包含空字符的任意字符, 属性值是除了undefined之外的任意值。对象都有自己的属性和方法。
JavaScript中的对象可以通过原型链来继承其它对象的属性和方法。
对象字面量
创建对象可以使用new关键字后跟一个构造函数Object()来创建,也可以通过对象字面量来创建。对象字面量法就是包围在一对花括号中的0个或多个"名/值"对。
var obj = new Object();
var obj1 = {
name : "Tom",
age : 21
};
在对象中也可以嵌套对象。如果属性名是合法的标识符而还是保留字,可以不使用双引号包围起来。
检索与更新
对象检索对象的属性,也就是访问对象的属性可以使用[],里面用双引号将要访问的属性名括起来,也可以使用"."后跟属性名来访问。
var obj = {
name : "Tom",
age : 21
};
console.log(obj["name"]); //Tom
console.log(obj.age); //21
"[]"方式访问对象一般用于不确定某属性是否是该对象的属性时使用,建议使用圆点来访问对象属性。
更新属性、新添加属性:修改属性值,或新添加属性也使用 圆点。
obj.name = "Bob";
obj["name"] = "Bob";
obj.job = "WEB前端工程师";
引用
对象是通过引用来传递的,它们永远不会被复制。也就是说定义一个对象,该对象名就是一个指向对象的引用,该对象名就是一个指针,它指向一个对象。
var obj1 = new Object(); //定义一个对象
var obj2 = obj1; //该操作就是将一个对象的指针obj1赋值给了ojb2
这样obj1与obj2同时指向一个对象,将obj1中的值(指针)复制给了obj2,那么改变其一个变量,另一个变量也会受到影响。
obj1.name = "Tom"; //为对象添加属性名和属性值
console.log(obj2.name); //Tom
以上操作是:为obj1变量指向的对象添加一个属性,因为obj2也指向这个对象,所以obj2.name就是obj1变量赋值的值。
原型
每个对象都连接到一个原型对象,可以通过这个原型对象继承其它对象的属性和方法。通过对象字面量创建的对象都会连接到Object.prototype。
当创建一个新对象时,可以选择某个对象作为这个新对象的原型。
var obj1 = {};
if (typeof Object.create != "function") { //判断对象的属性是否是一个函数
Object.create = function (o) {
var F = function () {}; //新创建一个对象作为构造函数。
F.prototype = o; //将传入的对象的指针赋值给新对象的原型对象,使其实现继承,F继承了o对象的属性和方法
return new F(); //最后返回一个新对象的实例对象。这个实例对象拥有了o对象的属性和方法
};
}
var obj2 = Object.create(obj1);
反射
可以通过hasOwnProperty()方法来确定某对象是否有某个属性,如果有返回true,反之,返回false。
var obj = new Object();
obj.hasOwnProperty("name"); //false
枚举
可以通过for in语句来遍历某对象的所有属性,该方法来枚举出对象的所有属性--包括不可枚举的属性也会被遍历出来。使用for in语句遍历出来的属性是没有顺序的。
所以要避免使用for in语句来遍历对象的属性。可以使用数组的方式,用for循环语句来遍历对象的属性。这样遍历出来的属性的顺序就是属性名在对象中的顺序。
推荐使用for of语句来遍历对象属性更好。
删除
可以使用 delete方法来删除对象的某个属性。
var obj = {name : "Tom"};
console.log(obj.name); //Tom
delete obj.name; //删除name属性
console.log(obj.name); //undefined
如果该对象是继承了某个对象,那么删除这个属性后,可能会暴露出该对象的原型对象中的这个属性。也就是被继承的对象的属性。
减少全局变量的污染
最小化使用全局变量之一:为程序只创建一个全局变量,将全局性的资源容纳到一个名称空间下,就会减少应用程序之间的冲突。