初窥javaScrit权威指南,第七章 数组(1)

注意:
js当中的数组是无类型的,同一个数组可以是不同的类型,索引大小是32位数(2^32 -2)。 同时他是动态的,会自己调整长度大小。

继承:
Array.prototype.

创建数组:

 var empty = [];
 var primes = [1,2,3,4];
 var misx = [1,1,true,"a"];

----------

直接量可以是常量:
var base = 1024;
var table = [base+2,base+1];


----------
可以包含对象直接量或者数组直接量:
var b = [[1,{x:1,y:2}],[2,{x:1,y:2}]];


----------
省略的情况下:
var count = [1,,3];  // 结果是  1,undefined,3
var undef = [,,]; // 结果是[ <2 empty items> ]  两个都是undefined


----------
其他:
var a = new Array();     // equals to  var a = [];
????var a = new Array(10);   //指定长度,但是还没有存储值 数组索引属性 0,1 也没有定义
var a = new Array(5,4,3,1,"test");  // 使用起来更加简单

数组元素的读和写:

 读写:
 var a = ["world"];
 var value = a[0];
 a[1] = 3.14;
 i = 2;
 a[i] = 2;
 a[i+1] = 3;
 a[a[i]] = a[0];

 数组是特殊的对象形式:
 o = {};  // 普通对象
 a[1] = "one" // 用一个整数来索引
 a["one"] = 2;
 console.log(a["one"]);  // 2  equals to  a.one

 当索引是负数  或者大于其所有的属性的时候,就会变成数组的属性维护。
 a[-2] = 2;      // equals to a["-2"];


so  在js中我们可以知道不存在越界的错误概念。

稀疏数组:

包含从0开始的不连续索引的数组。 如果数组是稀疏的那么 array.length 大于元素的个数。
a = new Array(5);  // 没有元素,length = 5;
a = []; // 空数组,length=0;
a[1000] = 0;  // 一个元素 length = 1001;


注: 可以使用delete操作符来生产稀疏数组。


注: 数组直接量中省略值时不会创建稀疏数组,省略的值时undefined。

注: 足够稀疏的数组通常在实现上比稠密的数组更加慢、内存使用率更高。在这样的数组中查找元素       的时间与常规的数组属性的查找时间是一样长的。

0 in a1  // true : 索引0处有一个元素
0 in a2  // false : 索引0处没有元素

数组的长度(length属性):

数组的长度是索引i+1;  // 动态

删除 (只留下指定长度)
a = [1,2,3,4,5];  // 5
a.length = 3 ; // [1,2,3]
a.length = 0; // []
a.length = 5  // 5 []


------------
ECMAScript5 中可以使用Object.defineProperty() 让数组的length属性变成只读。
a = [1,2,3];  //
Object.defineProperty(a,"length",writable:false); // length属性只读
a.length = 0;           // a 不变


其他方法:(OBject.seal()  Object.freeze())

数组元素的添加和删除:

索引:
a =[];
a[0] = "zero";
a[1] = "one";

push() 向末尾存放方法:
a = [];
a.push("zero");    // a = ["zero"]
a.push("one","two"); // a = ["zero","one","two"]

delete来删除元素
var a = [1,2,3,4,5];
delete a[1];     // 变成稀疏函数 

1 in a // false  index 1 没有定义
a.length  // 5delete 不影响数组的长度    

数组的遍历:

method1:

var o = {
 x:1,
 y:2,
}
var keys = Object.keys(o);
var values = [];
for(var i = 0;i <keys.length; i++){
    var key = keys[i];
    values[i] = o[key];  
    console.log(key +"="+values[i]);
}


跳过一次循环
continue


method2:

for( var index in o){
    console.log(o[index]);   // 1 2
}


ECMAScript5:

var data = [1,2,3,4,5];
var sumOfSquares = 0;
data.forEach(function(x){
    sumOfSquares += x*x; // 平方相加
});

console.log(sumOfSquares); // 55

多维数组:

 // 创建一个多维数组
 var table = new Array(10);  
 for(var i = 0; i<table.length; i++){
    table[i] = new Array(10);
}

// 初始化数组
forvar row = 0; row <table.length; row++) {
    for(col = 0; col <table[row].length; col++){
        table[row][col] = row * col;
    }
}

var product = table[5][7];  // 35
JavaScript预约程序代码可以用来创建一个简单的预约系统,以下是一个示例代码: ```javascript // 假设我们有一个预约系统要记录用户的姓名和时间 // 创建一个空数组用于存储预约数据 var appointments = []; // 定义一个预约对象的构造函数 function Appointment(name, time) { this.name = name; this.time = time; } // 定义一个函数来添加预约 function addAppointment(name, time) { // 使用构造函数创建预约对象 var appointment = new Appointment(name, time); // 将预约对象添加到预约数组中 appointments.push(appointment); } // 定义一个函数来显示所有预约 function showAppointments() { // 遍历预约数组并输出预约信息 for (var i = 0; i < appointments.length; i++) { console.log("预约" + (i + 1) + ":"); console.log("姓名:" + appointments[i].name); console.log("时间:" + appointments[i].time); console.log("-----------------------"); } } // 测试代码 addAppointment("张三", "2021-01-01 09:00"); addAppointment("李四", "2021-01-02 14:00"); addAppointment("王五", "2021-01-03 11:30"); showAppointments(); ``` 这段代码创建了一个预约系统,可以通过`addAppointment`函数添加新的预约,通过`showAppointments`函数显示所有预约。预约对象由`Appointment`构造函数创建,包含姓名和时间两个属性。在测试代码中,我们添加了三个预约,并使用`showAppointments`函数输出所有预约的信息。 注意,这只是一个简单的预约系统示例,实际应用中可能需要更复杂的功能和逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值