JavaScript中没有类的语法,是用函数闭包(closure)模拟出来的,下面讲解的时候还是用C#中的类、构造函数的概念,JavaScript中String、Date等“类”都被叫做“对象”,挺怪,方便初学者理解,不严谨。JavaScript中声明类(类不是类,是对象):
<script type="text/javascript">
function Person(name, age) {
this.name = name;
this.age = age;
this.SayHello = function () {
alert("你好,我是" + this.name + ",我" + this.age + "岁了");
}
}
var p1 = new Person("tom", 20);
p1.SayHello();
</script>
必须要声明类名,function Person(name,age)可以看做是声明构造函数,Name、Age这些属性也是使用者动态添加了。var p1 = Person("tom", 30);//不要丢了new,否则就变成调用函数了,p1为undefined。new 相当于创建了函数的一个实例
JavaScript中的Array对象就是数组,首先是一个动态数组,而且是一个像C#中数组、ArrayList、Hashtable等的超强综合体。
<script type="text/javascript">
var names = new Array();
names[0] = "tom";
names[1] = "jerry";
names[2] = "lily";
for (var i = 0; i < names.length; i++) {
alert(names[i]);
}
</script>
输出:分别弹出tom,jerry,lily
无需预先制定大小,动态。
求一个数组中的最大值。定义成函数。
<script type="text/javascript">
function getMax(arr) {
var max = arr[0];
for (var i = 0; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
return max;
}
var arr1 = new Array();
arr[0] = 12;
arr[1] = 32;
arr[2] = 25;
arr[4] = 12;
alert(getMax(arr1));
</script>
7.2 练习:
将一个字符串数组输出为|分割的形式,比如“刘在石|金钟国|李光洙|HAHA|宋智孝|Gary|池石镇”。不要使用JavaScript中的Join函数。arr1.join("|")将数组用分隔符连接成一个字符串。
<script type="text/javascript">
function myjoin(arr) {
if (arr.length <= 0) {
return "";
}
var s = arr[0];
for (var i = 1; i < arr.length; i++) {
s = s + "|" + arr[i];
}
return s;
}
var arr = new Array();
arr[0] = "刘在石";
arr[1] = "金钟国";
arr[2] = "李光洙";
arr[3] = "HAHA";
arr[4] = "宋智孝";
arr[5] = "Gary";
arr[6] = "池石镇";
alert(myjoin(arr));
</script>
将一个字符串数组的元素的顺序进行反转。{"3","a","8","haha"} {"haha","8","a","3"}。不要使用JavaScript中的反转函数。提示:
第i个和第length-i-1个进行交换。定义成函数。myreverse
为什么length要除以2:因为
arr[i] = arr[arr.length - i - 1];
arr[arr.length - i - 1] = temp;
已经交换了。一次交换的是2个数。
<script type="text/javascript">
var f = function (arr) {
for (var i = 0; i < arr.length / 2; i++) {
var temp = arr[i];
arr[i] = arr[arr.length - i - 1];
arr[arr.length - i - 1] = temp;
}
return arr;
}
var arr = new Array();
arr[0] = 3;
arr[1] = "a";
arr[2] = 8;
arr[3] = "haha";
arr[4] = 2;
arr[5] = 1;
alert(arr);
alert(f(arr));
</script>
还有一种方法:
<script type="text/javascript">
var f = function (arr) {
var w;
var s = "";
for (var i = 0; i < arr.length; i++) {
w = arr.length - i - 1;
s = s + "," + arr[w];
}
return s.substring(1, s.length);//因为第1个s后面跟1个","所以需要截取,
}
var arr = new Array();
arr[0] = 3;
arr[1] = "a";
arr[2] = 8;
arr[3] = "haha";
arr[4] = 2;
arr[5] = 1;
arr[6] = 11;
alert(arr);
alert(f(arr));
</script>
JS中的Array是一个宝贝,不仅是一个数组,还是一个Dictionary,还是一个Stack。
<script type="text/javascript">
var pinyins = new Array();
pinyins["人"] = "ren";
pinyins["口"] = "kou";
pinyins["手"] = "shou";
alert(pinyins["人"]); //弹出ren
alert(pinyins.口); //弹出kou
for (var k in pinyins) {
alert(k); //分别弹出人、口、手 (注意:弹出的是key而不是value)
}
var arr = new Array();
arr[0] = "tom";
arr[1] = "Jim";
arr[2] = "Jerry";
for (var i in arr) {
alert(i);
} //弹出0,1,2,理由同上
</script>
像Hashtable、Dictionary那样用,而且像它们一样效率高。
for (var k in pinyins) {
alert(k); //分别弹出人、口、手 (注意:弹出的是key而不是value)
}这是js中的foreach方式运用
课下练习:网页版的火星文翻译。
对于数组风格的Array来说,可以使用join方法拼接为字符串
var arr = ["tom", "jim", "lily"];
alert(arr);
alert(arr.join("!"));//JS中join是array的方法,不像.Net中是string的方法
tom!jim!lily
for循环可以像C#中的foreach一样用
for循环还可以获得一个对象所有的成员,类似于.Net中的反射
for (var e in document) {
alert(e);
}
有了它没有文档也可以进行开发。