这段时间一直在期末复习, 这几天考完试末, 轻松了许多, 终于放假啦.
上篇文章 (很久了) 说的是 JavaScript 的操作符, 有相等操作符, 条件操作符, 赋值操作符等等, 这篇文章写的是语法篇的最后两个内容: 语句 和 函数 .
语句
语句由一个或多个词组成, 可以完成某些任务和操作.
if 语句
最常用也很熟悉的语句了, 它的语法如下:
- if (condition) {
- block1
- } else {
- block2
- }
其中 condition 会被转换成一个布尔值来确定执行那一块代码, 例如如果 condition 为 true, 则执行 block1 的代码, 否则执行 block2 . 如果想要更省事一点, 也可以直接用三目运算符来替代 if 语句, 例如下面的代码跟上述的 if 语句是一样的,
condition ? block1 : block2 ;
do-while 语句
一种循环语句, 它会至少先执行循环体内的代码一次, 然后在根据条件判断是否继续循环, 语法如下:
- do {
- code
- } while (condition);
while 语句
看看它的语法, 比较下跟 do-while 的区别:
- while (condition) {
- code
- }
可以看到, while 循环语句是上来就开始判断 condition 是否为 true , 是的话才会执行代码, 否则不会执行; 而前面的 do-while 循环是会至少执行一次代码再来判断条件, 这就是区别.
for 语句
依然是循环语句, 而且也是经常使用的循环语句. 它的语法如下:
- for ( init; expression; loop-expression) {
- code
- }
怎么使用它呢? 下面的代码会输出 1 到 10 之间的数:
- for (var i = 1; i<=10; i++) {
- console.log(i);
- }
其实 while 循环能做到的, for 循环也同样能做到, 上面的如果用 while 循环是这样:
- var i = 1;
- while (i <= 10) {
- console.log(i);
- i++;
- }
既然这样, 那还要 for 循环干嘛呢? for 循环可以做到根据已知条件来确定循环次数, 比如你要打印某个数 10 次, 那用 for 循环, 中间 i < 10 直接写就好了; 但如果事先并不知道要循环多少次, 条件也不是很清楚, 那么用 while 循环先执行着也是不错, 如果这段代码要先被执行一次, 那就用 do-while 好了.
for-in 语句
是一种迭代语句, 可以用来枚举对象的属性, 非常实用的语句. 语法如下:
- for (var propName in Windows) {
- document.write(propName);
- }
执行这段代码你将看到浏览器 Windows 对象的所有可枚举属性.
label 语句
label 语句可以在代码中添加标签, 以便将来使用, 语法如下:
labelName: code
通常会与 for 等循环语句配合使用, 由 break 或 continue 语句来引用.
break 和 continue 语句
break 语句可以让代码停止执行, 用在 for 语句中会立即退出循环; 而 continue 语句也是让代码停止执行, 但它不会退出循环, 而是从循环的顶部继续执行, 也就是在执行下一次循环.
- for (var i = 1; i <= 10; i++) {
- if ( i % 5 == 0) {
- console.log(i);
- break;
- }
- }
上面的代码找出 10 以内能被 5 整除的数, 找到了就输出, 而且找到了就不找了, 立刻停止退出循环, 最后输出的结果是 5 . 而如果使用 continue 替代 break 呢?
- for (var i = 1; i <= 10; i++) {
- if ( i % 5 == 0) {
- console.log(i);
- continue;
- }
- }
答案显而易见, 会输出 5 以及 10 . 因为找到了一个 5 之外, continue 的意思是不用再执行下面的代码了, 从顶部开始下一次循环再找.
with 语句
with 语句可以简化代码量, 以一个特定的对象来开头, 减少重复书写它的次数, 例如下面的代码:
- var qs = location.search;
- var hostName = location.hostname;
- var url = location.href;
每次都需要用到 location 这个对象, 我们可以把它关联起来, 用 with 语句改写:
- with (location) {
- var qs = search;
- var hostName = hostname;
- var url = href;
- }
这样就不必时刻写 location 字段了, 需要注意的是, 该语句在 严格模式 下是报错不能用的.
switch 语句
最后一个是 switch 语句, 它是为了解决 if 语句分支过多过长的问题, 例如下面这段冗长的 if 语句代码:
- if ( i == 100) {
- alert('恭喜你考了满分');
- } else if ( i == 90) {
- alert('优秀');
- } else if (i == 80) {
- alert('很不错');
- } else if (i == 70) {
- alert('勉强还行');
- } else if (i == 60) {
- alert('在挂科的边缘疯狂试探');
- } else {
- alert('骚年, 补考见');
- }
switch 语句为了优化上述代码, 写成这个样子:
- switch (i) {
- case 100:
- alert('恭喜你考了满分');
- break;
- case 90:
- alert('优秀');
- break;
- case 80:
- alert('很不错');
- break;
- case 70:
- alert('勉强还行');
- break;
- case 60:
- alert('在挂科的边缘疯狂试探');
- break;
- default:
- alert('骚年, 补考见');
- }
switch 语句的好处是能根据条件 i 的值, 来决定是到那一段 case 代码中去执行, 并且执行完后就 break 掉, 而不执行接下来的其它 case , 这样条例清晰, 一一对应, 而 default 就是上面所有 case 都不管用了, 那就默认执行它里面的内容.
上面这九大语句, 基本就是一门编程语言中常用到的语句了, 基本上其它编程语句也都是这么几种, 只不过语法稍微有所差别, 写法不同而已, 只要熟悉了上述这几种语句, 在其他语言中同样适用, 毕竟语言是互通的.
函数
函数也是每门编程语言都会有的语法概念. 有没有相过, 如果一个页面里面充斥着大量的语句, 这些语句实现着各种功能, 有些还经常是重复的, 你其实多写了几遍. 这时候, 你可以考虑把这些语句集合起来, 封装成一个函数. 函数就是封装了任意多条语句, 每次需要用的时候就调用它, 通过什么标识来区别函数呢? 函数名, JS 中函数使用 function 关键字来声明, 后面紧接的就是函数名, 在接着就是圆括号, 里面存放的是函数的参数, 用 , 隔开, 最后就是函数的主体代码了.
- function funName(arg1,arg2,arg3) {
- code
- }
上面就是 JS 定义一个函数的格式. 函数可以有一个 return 语句, 表示该函数返回结果, 如果使用了 return 语句, 则后面的代码一概不会被执行, 比如下面这样:
- function sum(a,b) {
- return a + b;
- console.log('hello world');
- }
输入两个参数值 a 和 b 调用 sum 函数, 可以计算 a + b 的结果, 但后面那句 hello world 是不会被执行了, 因为 return 语句就是最终语句了, 函数遇到 return 后就会立即停止退出. 另外, 还有一个 arguments 类数组对象一直存放着函数的参数, 使用 arguments 可以获取函数的参数信息, 比如上面的 sum 函数, 以下代码:
- function sum(a,b) {
- return a + b;
- console.log('hello world');
- console.log(arguments.length);
- }
当你 sum(10,20) 调用函数后, 最后那句代码会输出 2, 因为你输入了 10,20 两个参数, 长度为 2 , 前面说了, arguments 存放的是参数的信息, 它是一个类似数组的东西, 所以你可以用 arguments[0] 表示第一个参数, 也就是 10; 用 arguments[1] 表示第二个参数, 也就是 20 .
由于 JS 的函数参数实际上是一个数组, 所以不传值或者少传多传都不会报错, 这点可以说是非常宽松的, 相比其他语言来说. 你可以随意输入多个参数, 只不过会显示 undefined .
JS 的函数没有重载这一概念, 如果定义两个名字相同函数, 则后者覆盖前者. 但由于有 arguments 数组的存在, 可以通过使用 if 语句判断传入的 arguments 参数来相应执行不同的代码, 也算是模拟重载.
(全文完)
喜欢就点右下方的要你「好看」!
来源: http://www.jianshu.com/p/6a84f2adebeb