您的位置:首页 > Web前端 > JavaScript

JavaScript精华知识之对象部分

2017-07-09 23:13 330 查看
JavaScript中简单类型包括:number类型、string类型、undefiend类型、null类型、Boolean类型。其它值都是对象,数组是对象、函数是对象、正则表达式是对象、对象是对象、Date是对象。

对象是属性的容器,其中每个属性都有自己的属性名和属性值属性名可以是包含空字符的任意字符属性值是除了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


如果该对象是继承了某个对象,那么删除这个属性后,可能会暴露出该对象的原型对象中的这个属性。也就是被继承的对象的属性。

减少全局变量的污染

最小化使用全局变量之一:为程序只创建一个全局变量,将全局性的资源容纳到一个名称空间下,就会减少应用程序之间的冲突。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: