发布于:2020-02-15 21:53:52
一、 JavaScript中的算术运算和数学库函数
1.if-else if 语句
var mid = 25;
var high = 50;
var low = 1;
var current = 13;
var found = -1;
if (current < mid) {
mid = (current-low) / 2;
}
else if (current > mid) {
mid = (current+high) / 2;
}
else {
found = current;
}
2.switch 语句
= "February";
break;
case "3":
monthName = "March";
break;
case "4":
monthName = "April";
break;
case "5":
monthName = "May";
break;
case "6":
monthName = "June";
break;
case "7":
monthName = "July";
break;
case "8":
monthName = "August";
break;
case "9":
monthName = "September";
break;
6 | 第1 章
case "10":
monthName = "October";
break;
case "11":
monthName = "November";
break;
case "12":
monthName = "December";
break;
default:
print("Bad input");
}
3 循环结构
(1) while 循环
var number = 1;
var sum = 0;
while (number < 11) {
sum += number;
++number;
}
console.log(sum);
(2) 使用for 循环求和
var number = 1;
var sum = 0;
for (var number = 1; number < 11; number++) {
sum += number;
}
console.log(sum); // 显示55
(3)使用for 循环访问数组
var numbers = [3, 7, 12, 22, 100];
var sum = 0;
for (var i = 0; i < numbers.length; ++i) {
sum += numbers[i];
}
console.log(sum); // 显示144
二、函数
(1)有返回值的函数
function factorial(number) {
var product = 1;
for (var i = number; i >= 1; --i) {
product *= i;
}
return product;
}
print(factorial(4)); // 显示24
print(factorial(5)); // 显示120
print(factorial(10)); // 显示3 628 800
(2)JavaScript 中的子程或者void 函数
function curve(arr, amount) {
for (var i = 0; i < arr.length; ++i) {
arr[i] += amount;
}
}
var grades = [77, 73, 74, 81, 90];
curve(grades, 5);
print(grades); // 显示82,78,79,86,95
(3) 递归
function factorial(number){
if(number==1){
return number;
}else{
return number * factorial(number-1);
}
}
console.log(factorial(5));
输出
三、数组
创建数组
(1).var numbers = [];
(2).var numbers = new Array();
console.log(numbers.length); // 显示0
可以调用Array.isArray() 来判断一个对象是否是数组,如下所示:
var numbers = 3;
var arr = [7,4,1776];
print(Array.isArray(numbers)); // 显示false
print(Array.isArray(arr)); // 显示true
2.读写数组
在一条赋值语句中,可以使用[] 操作符将数据赋给数组,比如下面的循环,将1~100 的
数字赋给一个数组:
var nums = [];
for (var i = 0; i < 100; ++i) {
nums[i] = i+1;
}
还可以使用[] 操作符读取数组中的元素,如下所示:
var numbers = [1,2,3,4,5];
var sum = numbers[0] + numbers[1] + numbers[2] + numbers[3] +
numbers[4];
print(sum); // 显示15
如果要依次读取数组中的所有元素,使用for 循环无疑会更简单:
var numbers = [1,2,3,5,8,13,21];
var sum = 0;
for (var i = 0; i < numbers.length; ++i) {
sum += numbers[i];
}
print(sum); // 显示53
3.由字符串生成数组 split() 方法使用
var sentence = "the quick brown fox jumped over the lazy dog";
var words = sentence.split(" ");
for (var i = 0; i < words.length; ++i) {
console.log("word " + i + ": " + words[i]);
}
该程序的输出为:
word 0: the
word 1: quick
word 2: brown
16 | 第2 章
word 3: fox
word 4: jumped
word 5: over
word 6: the
word 7: lazy
word 8: dog
4.查找元素indexOf() 函数的使用
<script type="text/javascript">
var str="Hello world!"
document.write(str.indexOf("Hello") + "<br />")
document.write(str.indexOf("World") + "<br />")
document.write(str.indexOf("world"))
</script>
以上代码的输出:
0
-1
6
5.数组的字符串表示:(有两个方法可以将数组转化为字符串,join() 和toString())
var names = ["David", "Cynthia", "Raymond", "Clayton", "Mike", "Jennifer"];
var namestr = names.join();
console.log(namestr); // David,Cynthia,Raymond,Clayton,Mike,Jennifer
namestr = names.toString();
console.log(namestr); // David,Cynthia,Raymond,Clayton,Mike,Jennifer
6.由已有数组创建新数组: 合并数组 concat(),方法截取一个数组的子集创建一个新数组splice() 。
var cisDept = ["Mike", "Clayton", "Terrill", "Danny", "Jennifer"];
var dmpDept = ["Raymond", "Cynthia", "Bryan"];
var itDiv = cis.concat(dmp);
console(itDiv);
itDiv = dmp.concat(cisDept);
console(itDiv);
输出为:
Mike,Clayton,Terrill,Danny,Jennifer,Raymond,Cynthia,Bryan
Raymond,Cynthia,Bryan,Mike,Clayton,Terrill,Danny,Jennifer
7.为数组添加元素 push(),unshift()
var nums = [1,2,3,4,5];
console.log(nums); // 1,2,3,4,5
nums.push(6);
console.log(nums); // 1,2,3,4,5,6
8.unshift() 方法可以将元素添加在数组的开头
var nums = [2,3,4,5];
console.log(nums); // 2,3,4,5
var newnum = 1;
nums.unshift(newnum);
console.log(nums); // 1,2,3,4,5
nums = [3,4,5];
nums.unshift(newnum,1,2);
console.log(nums); // 1,2,3,4,5
9.从数组中删除元素
(1)使用pop() 方法可以删除数组末尾的元素:
var nums = [1,2,3,4,5,9];
nums.pop();
console.log(nums); // 1,2,3,4,5 删除数组末尾的元素9
(2)shift() 方法可以删除数组的第一个元素
var nums = [9,1,2,3,4,5];
nums.shift();
console.log(nums); // 1,2,3,4,5 删除数组的第一个元素9
(3)从数组中间位置添加和删除元素splice()
使用splice() 方法为数组添加元素,需提供如下参数:
起始
• 索引(也就是你希望开始添加元素的地方);
• 需要删除的元素个数(添加元素时该参数设为 0);
• 想要添加进数组的元素。
var nums = [1,2,3,7,8,9];
var newElements = [4,5,6];
nums.splice(3,0,newElements);
console.log(nums); // 1,2,3,4,5,6,7,8,9
看一个简单的例子。下面的程序在数组中间插入元素:
var nums = [1,2,3,7,8,9];
var newElements = [4,5,6];
nums.splice(3,0,newElements);
console.log(nums); // 1,2,3,4,5,6,7,8,9
下面是使用splice() 方法从数组中删除元素的例子:
var nums = [1,2,3,100,200,300,400,4,5];
nums.splice(3,4);
print(nums); // 1,2,3,4,5
9.为数组排序
(1)reverse() 数组排序翻转
var nums = [1,2,3,4,5];
nums.reverse();
print(nums); // 5,4,3,2,1
(2)sort() 数组进行排序字母排序
var names = ["David","Mike","Cynthia","Clayton","Bryan","Raymond"];
names.sort();
print(names); // Bryan,Clayton,Cynthia,David,Mike,Raymond
将这些搞清楚之后,传入一个大小比较函数,再来看看前面的例子:
function compare(num1, num2) {
return num1 - num2;
}
var nums = [3,1,2,100,4,200];
nums.sort(compare);
print(nums); // 1,2,3,4,100,200
10.迭代器方法
10.1 不生成新数组的迭代器方法
10.1.1 forEach()
我们要讨论的第一组迭代器方法不产生任何新数组,相反,它们要么对于数组中的每个元
素执行某种操作,要么返回一个值。
这组中的第一个方法是forEach(),该方法接受一个函数作为参数,对数组中的每个元素
使用该函数。下面这个例子展示了如何使用该方法:
function square(num) {
console.log(num, num * num);
}
var nums = [1,2,3,4,5,6,7,8,9,10];
nums.forEach(square);
该程序的输出为:
1 1
2 4
3 9
4 16
5 25
6 36
7 49
8 64
9 81
10 100
10.1.2 every()
isEven(num) {
return num % 2 == 0;
}
var nums = [2,4,6,8,10];
var even = nums.every(isEven);
if (even) {
print("all numbers are even");
}
else {
print("not all numbers are even");
}
输出为:
all numbers are even
将数组改为:
var nums = [2,4,6,7,8,10];
输出为:
not all numbers are even
10.1.3 some()
some() 方法也接受一个返回值为布尔类型的函数,只要有一个元素使得该函数返回true,
该方法就返回true。比如:
function isEven(num) {
return num % 2 == 0;
}
var nums = [1,2,3,4,5,6,7,8,9,10];
var someEven = nums.some(isEven);
if (someEven) {
print("some numbers are even");
}
else {
print("no numbers are even");
}
nums = [1,3,5,7,9];
someEven = nums.some(isEven);
if (someEven) {
print("some numbers are even");
}
else {
print("no numbers are even");
}
该程序的输出为:
some numbers are even
no numbers are even
reduce() 方法接受一个函数,返回一个值。该方法会从一个累加值开始,不断对累加值和
数组中的后续元素调用该函数,直到数组中的最后一个元素,最后返回得到的累加值。下
面这个例子展示了如何使用reduce() 方法为数组中的元素求和:
function add(runningTotal, currentValue) {
return runningTotal + currentValue;
}
var nums = [1,2,3,4,5,6,7,8,9,10];
var sum = nums.reduce(add);
print(sum); // 显示55
reduce() 方法和add() 函数一起,从左到右,依次对数组中的元素求和,其执行过程如下
所示:
add(1,2) -> 3
add(3,3) -> 6
add(6,4) -> 10
add(10,5) -> 15
add(15,6) -> 21
add(21,7) -> 28
add(28,8) -> 36
add(36,9) -> 45
add(45,10) -> 55
10.1.4 reduce()
reduce() 方法也可以用来将数组中的元素连接成一个长的字符串:
function concat(accumulatedString, item) {
return accumulatedString + item;
}
var words = ["the ", "quick ","brown ", "fox "];
数组 | 25
var sentence = words.reduce(concat);
print(sentence); // 显示 "the quick brown fox"
JavaScript 还提供了reduceRight() 方法,和reduce() 方法不同,它是从右到左执行。下面
的程序使用reduceRight() 方法将数组中的元素进行翻转:
function concat(accumulatedString, item) {
return accumulatedString + item;
}
var words = ["the ", "quick ","brown ", "fox "];
var sentence = words.reduceRight(concat);
print(sentence); // 显示 "fox brown quick the"
10.2 生成新数组的迭代器方法
= grades.map(curve);
print(newgrades); // 82, 70, 86, 97, 88
下面是对一个字符串数组使用map() 方法的例子:
function first(word) {
return word[0];
}
var words = ["for","your","information"];
var acronym = words.map(first);
print(acronym.join("")); // 显示"fyi"
在上面这个例子中,数组acronym 保存了数组words 中每个元素的第一个字母。然而,如
果想将数组显示为真正的缩略形式,必须想办法除掉连接每个数组元素的逗号,如果直接
调用toString() 方法,就会显示出这个逗号。使用join() 方法,为其传入一个空字符串
作为参数,则可以帮助我们解决这个问题。
filter() 和every() 类似,传入一个返回值为布尔类型的函数。和every() 方法不同的是,
当对数组中的所有元素应用该函数,结果均为true 时,该方法并不返回true,而是返回
一个新数组,该数组包含应用该函数后结果为true 的元素。下面是一个例子:
function isEven(num) {
return num % 2 == 0;
}
function isOdd(num) {
return num % 2 != 0;
}
var nums = [];
for (var i = 0; i < 20; ++i) {
nums[i] = i+1;
}
var evens = nums.filter(isEven);
print("Even numbers: ");
print(evens);
var odds = nums.filter(isOdd);
print("Odd numbers: ");
print(odds);
该程序的执行结果如下:
Even numbers:
2,4,6,8,10,12,14,16,18,20
Odd numbers:
1,3,5,7,9,11,13,15,17,19
下面是另一个使用filter() 方法的有趣案例:
function passing(num) {
return num >= 60;
}
var grades = [];
for (var i = 0; i < 20; ++i) {
grades[i] = Math.floor(Math.random() * 101);
}
var passGrades = grades.filter(passing);
print("All grades: );
print(grades);
print("Passing grades: ");
print(passGrades);
程序显示:
All grades:
39,43,89,19,46,54,48,5,13,31,27,95,62,64,35,75,79,88,73,74
Passing grades:
89,95,62,64,75,79,88,73,74
当然,还可以使用filter() 方法过滤字符串数组,下面这个例子过滤掉了那些不包含
“cie”的单词:
function afterc(str) {
数组 | 27
if (str.indexOf("cie") > -1) {
return true;
}
return false;
}
var words = ["recieve","deceive","percieve","deceit","concieve"];
var misspelled = words.filter(afterc);
print(misspelled); // 显示recieve,percieve,concieve
阅读 1534+
10