JavaScript 对象

来源:互联网 发布:鞋店开店软件 编辑:程序博客网 时间:2024/05/16 09:53

本篇博文主要记录一些对象的使用方法和操作,至于对象的声明和继承请看:《JavaScript 创建对象》、《JavaScript 原型继承》


对象字面量创建对象


一个对象字面量就是包围在一对花括号中的零或多个“键/值”对。键名(属性名)可以是包括空字符串在内的任何字符串,如果属性名是一个合法的JavaScript标识符,则不强制要求用引号括住属性名;用逗号来分隔多个“键/值”对。属性值可以为任意值,包括变量。

var value = 'this is a value';var obj = {  name: 'paper_crane',  '': 'empty string',  age: 22,  1: 'number 1',  'first-name': 'unacceptable property',  value: value};

在上面的例子中,定义了一个对象实例obj,可以看到,可以使用合法标识符作为其属性名,当用数字1作为其属性名时,会将数字1转换为字符串“1”,使用空字符串作为其属性名以及使用变量作为其属性值不会报错,但是first-name不是一个合法的标识符,故需要将其使用引号标识,否则会报错。

检索


检索对象里面的属性有两种办法:点表示法和[]后缀中括住一个字符串属性名的方法。点表示法的缺点为,当属性名为保留字或者非法字符串时,则会报错。

alert(obj.name);        // paper_cranealert(obj.age);         // 22alert(obj.value);       // this is a valuealert(obj.1);           // 报错alert(obj.first-name);  // NaN

使用点表示法能够很容易很直观的检索对象的属性,但是当访问一些非法标识符时,要么报错要么出现不可理解的结果。使用[]后缀方法就可以避免,但是带来的损失就是无法很直观的检索对象属性。

alert(obj['name']);alert(obj['']);alert(obj['age']);alert(obj[1]);alert(obj['1']);alert(obj['first-name']);alert(obj['value']);

上面的例子使用了[]后缀访问了obj对象的属性,有一点需要注意的是,后缀[]里面必须是字符串或者是变量,比较特殊的一点是数字也可以,实际上数字会自动转换为字符串,而且,JavaScript的数组也是这样实现的,即[]里面可以是数字也可以数字的字符串形式,最后都会统一转换成字符串形式,所以JavaScript中数组的效率比其他语言的数组效率要低。

判断对象有没有特定的属性,可以直接检索其值看看是否为undefined,也可使用in操作符和hasOwnProperty()方法。in操作符无法区分特定属性是否在原型中,hasOwnProperty()方法则可判断属性是否属于原型。

更新


在前面已经知道如何检索一个对象的属性,更新的话,可以直接对对象的属性赋值,如果存在此属性,那么就可以改变属性的值,如果没有,就会创建一个属性,并且赋值。

obj['first-name'] = 'paper_crane';obj['second-name'] = 'crane';alert(obj['first-name']);alert(obj['second-name']);

在上面的例子中,更新了first-name属性值和增加了second-name属性。

删除


使用delete可以删除对象的属性

delete obj['first-name'];alert(obj['first-name']);   // undefined

枚举


枚举对象的属性,可以使用for in语句。但是for in语句是无法确保按顺序访问对象的属性的,同时还会列出一些在原型中的属性和方法,为了过滤掉属于原型中的方法,可以使用hasOwnProperty方法。

for (var attr in obj) {  if (obj.hasOwnProperty(attr)) {    console.log(obj[attr]);  }}

减少全局变量污染


可以定义一个全局变量对象OBJ,将所有的全局变量都放入其中,可以明显的减少全局变量的时候。但是,更好的方法是使用闭包来减少全局变量的污染。

数组去重


当数组存在重复元素,但是又不能打乱元素顺序的情况下,使用对象来达到数组去重的效果是很常用的方法。

var arr = ['b', 'a', 'c', 'a', 'd', 'c', 'b'];var obj = {};var i;var result = [];for (i = 0; i < arr.length; i++) {  if (!obj[arr[i]]) {    obj[arr[i]] = 1;    result.push(arr[i]);  }}console.log(result);   // b, a, c, d


0 0
原创粉丝点击