红宝书阅读笔记ch3-3

红宝书阅读笔记ch3-3

语句

由于笔者对if、do-while、while、for、break、continue、switch这些语句已经很熟悉了,这里就不在这里花跟更多的功夫去记了,如果有不了解这些流程控制语句的读者可前往:w3schoo菜鸟教程网 了解相应的语句。
接下来笔者会记一下以往不熟悉的语句,如label、with等。

  • for-in语句,是一种精准的迭代语句,可以用来枚举对象的属性。
    语法:
    for (property in expression) statement
    示例:

for (var proName in window) {
document.writeln(proName);
}

注意:由于ECMAScript对象的属性没有顺序,因此对于for-in语句循环输出的语句是不可预测的,虽然每个属性都会返回一次,但返回的先后顺序因浏览器而异。如果迭代对象的变量值为null或undefined,for-in语句会抛出错误,在 ES5以后,对于这种情况不再抛出错误而是不再执行循环体。为了保证兼容性,建议在使用for-in语句以前,先检测该对象的值是不是null或undefined。

  • 使用label语句可以在代码中添加标签,以便将来使用。
    语法:
    label: statement
    举例:

var num=0;
outermost:
for(var i=0; i<10;i++){
for(var j=0; j<10; j++){
if(i==5 && j==5){
break outermost;
}
num++;
}
}
console.log(num); //55
var num=0;
outermost:
for(var i=0; i<10;i++){
for(var j=0; j<10; j++){
if(i==5 && j==5){
continue outermost;
}
num++;
}
}
console.log(num); //95

标签由break或continue语句引用。加标签的语句一般都是要与for语句等循环语句使用。

  • with语句的作用是将代码的作用域设置到一个特定的对象中。
    语法:
    with (expression) statement ;
    定义with语句的主要目的是为了简化编写多次编写同一个对象的工作,举例:

var qs=location.search.substring(1);
var hostName=location.hostname;
var url=location.href;
//上面的代码都包含location对象,使用with语句改写如下:
with (location){
var qs=search.substring();
var hostName=hostname;
var url=href;
}

注意:大量使用with语句会导致性能下降,同时也给代码调试带来不便,因此在开发大型应用程序时,不建议使用with语句。同时严格模式下不允许使用with语句。

函数

  1. 通过函数可以封装任意多条语句,而且可以在任何地方、任何时候调用执行。

  2. 要么让函数始终都返回一个值,要么永远都不要返回值。

  3. ECMAScript中参数在内部是用一个数组来表示,在函数体内通过arguments对象来访问这个参数数组,从而获取传给函数的每一个参数。

function sayHi(){
alert("Hello "+arguments[0]+","+arguments[1]);
alert(arguments.length); //参数数组的长度
}
function doAdd(){
if(arguments.length==1){
alert(arguments[0]+10);
}else if(arguments.length==2){
alert(arguments[0]+arguments[1]);
}
}
doAdd(10); //20
doAdd(10,30); //40
//arguments对象可以和命名参数一起使用
function doAdd(num1,num2){
if(arguments.length==1){
alert(arguments[0]+10);
}else if(arguments.length==2){
alert(num1+arguments[1]);
}
}
doAdd(10);
doAdd(10,30);
  1. ECMAScript因为没有函数签名所以做不到真正的重载,如果在ECMAScript定义了两个名字相同的函数,则改名字属于后定义的函数。

  2. 通过检查传入函数中参数的类型和数量并做出不同的反应可以模仿方法的重载。