前端宝典【犀牛书】05(语句)
表达式语句、声明语句、赋值语句、循环语句、跳出语句、条件语句
一、循环语句的空语句:
for( i = 0; i < a. length; a[ i++] = 0) /* empty */ ;
二、声明语句
变量声明
for( var i = 0; i < 10; i++) console. log( i); for( var i = 0, j= 10; i < 10; i++, j--) console. log( i* j); //这里的var声明的变量也会提前,多次声明同一个变量是无所谓的。 for( var i in o) console. log( i);
函数声明
function hypotenuse( x, y) { return Math. sqrt( x* x + y* y); //下一 节会 讲到 return } function factorial( n) { //一个 递归 函数 if (n <= 1) return 1; return n * factorial( n - 1); }
1、函数声明会将函数的名字当成一个变量指向函数对象,函数声明也不能被delete。
2、函数声明一般不写在其他语句内,如if、switch。
原因:不具备可移植性,不好进行函数调用
3、函数声明语句通常在js的顶层作用域内,也可以在嵌套函数的顶层作用域内。
三、条件语句
if: if后面必须跟随一条语句,可以是语句块也可以是上面写到的 //empty;
siwtch: case 比较的是恒等于,case中因避免调用表达式和赋值表达式;(java、c、c++中的case是常量并且会被编译成跳转表,执行时很高效)
default可以放在语句的任何地方,但按照习惯应该放在末尾便于阅读。
三、循环语句
while:
while (expression)
statement
do/while:
do statement
while (expression);
for:
for( initialize ; test ; increment) statement
//等价于while语句
initialize;
while( test) {
statement increment;
}
//不管是否有continue都要执行自增表达式,但是break语句又会导致自增语句多运行一次,很难模拟二者表达式完全相同。
for( initialize; test; increment) body;
initialize ;
while( test ) { try { body ; } finally { increment ; } }
//多个变量
var i, j; for( i = 0, j = 10 ; i < 10 ; i++, j--) sum += i * j;
//返回第一个不包含o.next的属性
function tail( o) { // 返回 链 表 的 最后 一个 节点 对象
for(; o. next; o = o. next) /* empty */ ; // 根据 判断 o. next 是不是 真 值 来 执行 遍历
return o;
}
for in:
1、for in只遍历可枚举的属性,js内置方法不可枚举eg:toString(),内置对象属性也不可枚举。
2、for in循环体删除枚举的属性,属性将不再枚举
循环体定义对象新属性,这些属性也不会枚举(书上说有办法实现,读者后续更新。。。。)
3、for in 枚举的顺序
按属性定义顺序
如果是直接量定义对象即{},则按属性写法的顺序来
for (variable in object)
statement
//如果表达式是null、undefined解释器会跳过继续后面的代码
//将属性值赋值给数组
var o = {x: 1, y: 2, z: 3};
var a = [], i = 0;
for( a[ i++] in o) /* empty */;
四、跳转语句
break
break 语句 是 跳 转到 循环 或者 其他 语句 的 结束。
continue
continue 语句 是 终止 本次 循环 的 执行 并 开始 下一 次 循环 的 执行。
return
return 语句 让 解释器 跳出 函数 体 的 执行, 并提 供 本次 调用 的 返回 值。
throw
throw 语句触发或者“ 抛出” 一个异常,它是与 try/ catch/ finally 语句一同 使用 的, 这些 语句 指定了处理异常的代码逻辑。
标签语句
identifier: statement
mainloop: while( token != null) { // 忽略 这里 的 代码... continue mainloop; // 跳 转到 下一 次 循环 // 忽略 这里 的 代码... }
五、其他语句
with:(简称扩展作用域),查标识符访问作用域链,创建新变量使用的是赋值表达式,with语句会被忽略
这条 语句 将 object 添加 到 作用域 链 的 头部, 然后 执行 statement, 最后 把 作用域 链 恢复 到 原始 状态。
with (object) statement
eg:
with( document. forms[ 0]) { // 直接 访问 表单 元素, 例如:
name. value = "";
address. value = "";
email. value = "";
}
debugger和"use strict"请自行看书