JavaScript对象与数组核心机制详解:遍历、属性检测与创建

作者:纸飞机时间:2026-10-22 19:08:34浏览:597

本文详解JavaScript中对象与数组的核心操作。重点解析for/in枚举属性的机制及其局限性,介绍delete删除属性、constructor类型判断、toString本地化转换,以及hasOwnProperty和isPrototypeOf等属性检测方法。同时涵盖数组的直接量与构造函数创建方式,并阐明索引范围及越界处理规则。


这部分内容具有一定的难度,请做好心理准备。



for/in 遍历与属性删除

1. for/in 遍历语句:


这是一种用于遍历(枚举)对象属性的方法,适用于循环访问那些在编码时事先未知的属性。


它可以枚举出用户自定义的所有属性,但无法枚举某些预定义的属性和方法。


通常,无法被枚举的属性是继承自原型的属性。



删除对象属性的操作:


delete book.width;


执行此操作后,属性将从对象中移除。此后,使用 for/in 循环将无法枚举该属性,且通过 width in book 也无法检测到该属性。



for/in 的另一个重要用途是与关联数组配合使用(若忘记关联数组的定义,可参考前文章节):


for(stoct in port ){


value += get_value(stoct) * port[stoct];


}

Object 通用属性与方法

2. 通用的 Object 属性和方法:


1)constructor 属性:


每个对象都具备此属性,它引用了初始化该对象的构造函数。


例如:


var d = new Date(); // 使用 Date() 构造函数创建一个对象 d;


d.constructor == Date; // 返回 true,属性 d.constructor 引用 Date;



该属性有助于确定对象的类型;


例如:


我们想确定一个值的类型是否为 Date 类型:


If((typeof o==”object” )&& (o.constructor==Date)){


// 首先检查是否为对象,然后检查是否引用 Date


}

上述代码也可以改写为:


If((typeof o==”object” )&& (o instanceof Date)){


// 使用 instanceof 运算符来检测 o.constructor 属性的值。


}

3. toString() 和 toLocaleString() 方法:


1):toLocaleString() 返回对象的本地化字符串表示。


toString 和 toLocaleString 通常返回相同结果,但在子类中可能存在差异:


例如:


Array、Date 和 Number 都定义了返回本地化值的 toLocaleString() 方法。



4. hasOwnProperty() 和 propertyIsEnumerable() 方法:


1):hasOwnProperty


var a = { x : 1 , y : 2};


var k = a.hasOwnProperty("x");


alert(k) // 返回 true


alert( Math.hasOwnProperty("z") ); // 返回 false


alert( Math.hasOwnProperty("cos") ); // 返回 true


注:Math.cos() : 以弧度为单位计算并返回指定角度的余弦值。


propertyIsEnumerable() 返回的结果与 hasOwnProperty() 相同;



4. isPrototypeOf() 方法:


如果方法所属的对象是参数的原型对象,则返回真。


var a = { x : 1 , y : 2};


var k1 = Object.prototype.isPrototypeOf(a); // o.constructor = Object


var k2 = Object.prototype.isPrototypeOf(Function); // Function.constructor = Object


alert(k1) // 返回 true


alert(k2) // 返回 true



数组创建与索引机制

5. 数组:


1)创建数组:


数组直接量:


var es = [ ] ;


复杂示例 var es = [ [ 1, {x:1 , y : 2}] , [ 2, {x:3 , y : 4}] ];


另一种方式是使用 Array() 构造函数:


V1 : 无参数:


var a = new Array();


创建空数组,与 var a =[ ] 等价;



V2 : 多个参数:


var a = new Array( 1,2,3,”tt”) ; // 可以看出直接量定义更简单。



V3 : 1个数字参数:


var a = new Array (3);


创建具有 3 个元素的数组,每个元素的值为 undefined ;



6. 数组的下标(索引):


有效范围:0 <= 下标 < 2的32次方 – 1 ;


如果下标不在该范围内,JavaScript 会将其转换为字符串,作为对象属性的名称;


而不是作为数组的下标;


例如:


a[-1.2] = “test” ; // 等价于 a[“-1.2”] =”test” ;


// 代码解释:创建一个名为 “-1.2”的属性,而不是定义一个新的数组元素。


1

2下一页阅读全文

作者最新文章