当前位置:资讯中心>技术文章
公司动态 行业新闻 技术文章

用Node.js学 JavaScript (二)基本控制

发布时间:2017-05-26 点击数:3153

在本期当中,逍遥子科技将继续介绍 JavaScript 的语法,包含控制逻辑与循环等等。

if 判断

JavaScript 的 if 语句,和 C 语言几乎一样。举例而言,下列程序可以根据 score 所设的定分数,来印出「及格」或「不及格」的讯息,只要大于 60 分,就算是及格了。

档案:score.js

var score = 61;


if (score >= 60)

console.log("及格");

else

console.log("不及格");

写完上述程序之后,请务必将档案储存成 UTF8 的格式 (Unicode 8 位模式) ,我的习惯是采用 Notepad++ 这个编辑器,然后储存成「UTF8 档首无 BOM」的格式,

如果您没有储存成 UTF8 的格式,而是用预设的 ANSI 格式,那么印出来的中文就会看不到 (或者变成乱码),如下图所示,这是因为 node.js 默认采用 UTF8 编码的缘故。


因此请务必要将档案储存成 UTF8 格式,这样会比较不容易出错。

练习:请执行完上述程序之后,将 score 改为 56,再重新执行一次,看看会印出甚么?

两种相等判断

在 javascript 当中,比较特别的一件事情是,是否相等的判断通常有两种,一种是两个等号的 `==` ,另一种是参个等号的 `===`。

这两种判断到底差别在哪里呢?答案是:三个等号者会判断型态是否相等,因此是严格的相等,而两个等号者不会判断型态,因此是不严格的相等,以下范例说明了两者的差异。

档案:equals.js

console.log('"30"==30 is ', "30" == 30);

console.log('"30"!=30 is ', "30" != 30);

console.log('"30"===30 is ', "30" === 30);

console.log('"30"!==30 is ', "30" !== 30);

执行结果:

D:\js\code>node equals.js

"30"==30 is  true

"30"!=30 is  false

"30"===30 is  false

"30"!==30 is  true

while 循环

JavaScript 的循环与 C 是非常像的,包含 while 与 for 语句都几乎是一样的。以下是一个 JavaScript 的 while 循环范例。

档案:while.js

i=1;

while (i<=10) {

console.log("i=", i);

i = i + 1;

}

执行结果:

D:\jsbook>node while

i= 1

i= 2

i= 3

i= 4

i= 5

i= 6

i= 7

i= 8

i= 9

i= 10

如果我们在从 1 数到 10 的过程当中,把变量 i 进行累加,那么就可以得到累加总和, 1+..+10 = 55 的结果如下。

档案:whilesum.js

sum=0;

i=1;

while (i<=10) {

sum = sum + i;

console.log("i=", i, " sum=", sum);

i = i + 1;

}

执行结果

D:\jsbook>node whilesum

i= 1  sum= 1

i= 2  sum= 3

i= 3  sum= 6

i= 4  sum= 10

i= 5  sum= 15

i= 6  sum= 21

i= 7  sum= 28

i= 8  sum= 36

i= 9  sum= 45

i= 10  sum= 55

for 循环

档案:for.js

for (i=1;i<=10;i++) {

console.log("i=", i);

}

执行结果:

D:\jsbook>node for.js

i= 1

i= 2

i= 3

i= 4

i= 5

i= 6

i= 7

i= 8

i= 9

i= 10

当然、同样的事情也可以用 for 循环来做,这种写法会更短更简洁,以下是采用 for 进行 1+…+10 的范例。

档案:sum.js

sum=0;

for (i=1;i<=10;i++) {

sum = sum + i;

console.log("i=", i, " sum=", sum);

}

执行结果:

D:\jsbook>node sum.js

i= 1  sum= 1

i= 2  sum= 3

i= 3  sum= 6

i= 4  sum= 10

i= 5  sum= 15

i= 6  sum= 21

i= 7  sum= 28

i= 8  sum= 36

i= 9  sum= 45

i= 10  sum= 55

另外、 javascript 也从 C 语言那里继承了 continue 与 break 等语句,遇到 continue 时会回到循环开头,忽略后面语句。而遇到 break 时则会跳出循环。

档案:forbreak.js

for (i=1;i<=10;i++) {

if (i == 3) continue;

if (i == 8) break;

console.log("i="+i);

}

执行结果:

D:\jsbook>node forbreak.js

i=1

i=2

i=4

i=5

i=6

i=7

数组

JavaScript 的数组宣告非常简单,就是用 `[...]` 所框起来的一连串数据,或者您也可以用 `new Array()` 语句来建立一个空的数组,而且可以用 length 属性来取得数组大小。

档案:array.js

var a=[1,6,2,5,3,6,1];


for (i=0;i

console.log("a[%d]=%d", i, a[i]);

}

执行结果

D:\jsbook>node array.js

a[0]=1

a[1]=6

a[2]=2

a[3]=5

a[4]=3

a[5]=6

a[6]=1

当然、javascript 有些语法是 C 语言所没有的,像是 JavaScript 的 foreach 语句采用 `for (i in c)` 这样的语法,其中的 c 必须是个数组或容器,而 i 则是索引值 (注意、不是内容,是索引值),以下是这种语句的一个范例。

档案:foreach.js

var a=[1,6,2,5,3,6,1];


for (i in a) {

console.log("a[%d]=%d", i, a[i]);

}

执行结果

D:\jsbook>node foreach

a[0]=1

a[1]=6

a[2]=2

a[3]=5

a[4]=3

a[5]=6

a[6]=1

接着、请读者可以思考并尝试一下,如何撰写下列的两个程序。

习题 1:请写一个程序可以将两个数组 a=[1,2,3] b=[3,2,1] 相加。

习题 2:请写一个程序可以计算两个向量 a=[1,2,3] b=[3,2,1] 的内积。

二维数组

当然、我们也可以宣告二维、三维、甚至更高维的数组,以下是一个将二为数组格式化为字符串后印出来的范例。

档案:array2D.js

var a=[[1,6,2],

[5,3,6]];


for (var i=0; i

var line = "";

for (var j=0; j

line = line + a[i][j] + " ";

}

console.log(line);

}

执行结果

D:\jsbook>node array2D

1 6 2

5 3 6

看了上述范例之后,也建议读者可以尝试一下撰写下列程序。

  • 习题 1:请写一个程序可以将两个矩阵 a=[[1,2,3], [2,3,4]] b=[[1,1],[2,2],[3,3]] 相加。
  • 习题 2:请写一个程序可以将两个矩阵 a=[[1,2,3], [2,3,4]] b=[[1,1],[2,2],[3,3]] 相乘 (内积)。

字典 (对象)

虽然上述这些 JavaScript 的语法很像 C 语言,但是 JavaScript 本质上仍然是个动态语言,其特性比较像 Python、 Ruby 等语言,因此默认就有提供更高阶的数据结构,其中最重要的一个就是字典 (dictonary),字典中的基本元素是 (key, value) 的配对,我们只要将 key 传入就可以取得 value 的値,以下是一个 JavaScript 的字典范例。

档案:dict.js

var dict={ name:"john", age:30 };


dict["email"] = "john@gmail.com";

dict.tel = "02-12345678";


for (var key in dict) {

console.log("key=", key, " value=", dict[key]);

}


console.log("age=", dict.age);

console.log("birthday=", dict["birthday"]);

执行结果

D:\js\code>node dict.js

key= name  value= john

key= age  value= 30

key= email  value= john@gmail.com

key= tel  value= 02-12345678

age= 30

birthday= undefined

结语

在本章中,我们介绍了「变量、表达式、if 判断式, for 与 while 循环」,还有「数组与字典对象」等基础语法,学会这些语法之后,就可以写一些基础的小程序了。

但是若要写出更好、更模块化的程序,那就还需要学会「函数与面向对象」的写法,这将是下一期的主题。