语句就是javascript整句和命令。
表达式语句:
count++; alert(123); a = 100; .......
复合语句和空语句:
复合语句就是用逗号将多个语句连在一起形成复合语句。{x=1;y=2;alert(x);alert(y)}
ps:在javscript中没有块级作用域,只有函数作用域。
空语句包含0条语句,在部分时候也是有用的。
如for(var i = 0; i < 3 ; a[i++] =0);在这里最后是一个分号,会执行for循环括号里面的语句。
声明语句:
var 声明一个变量。
假如var声明在一个函数作用域内,那么这个变量就是局部作用域。
ps:变量在函数作用域中有提前声明的问题
window.onload = function(){ var b = "hello world"; function a(){ console.log(b); //变量提前声明,undifined var b = "world hello"; //由于变量b在这里定义了,所以导致变量提前声明 console.log(b); } console.log(b); a(); }
在上面的代码中,函数a中先输出b,但是b并没有在之前声明,但是在b之后有声明b=“world hello",根据变量在函数作用域提前声明的规则,那么var = b会提前到函数块的最顶上,所以第一个console.log(b)为undifined。
function 定义函数,必须使用花括号,即使是一条语句,不可省略花括号。
var a = function(){} 函数定义表达式方式
function a(){} 函数声明方式
这两种定义函数的方式是有区别:
第一种表达式方式在定义之后,var声明的变量会提前到作用域的顶部,但是函数块还在原来的地方,所以假如在函数块之上调用函数就会报错。
第二种函数声明方式在声明之后,变量和函数块都会提前到作用域的顶部,可以做作用于上下文,所以在函数块之上调用函数可以正常使用。
window.onload = function(){ alert(b()); //"world hello" alert(a()); //Uncaught TypeError: a is not a function //函数表达式中,只有变量声明被提前了,变量初始化代码依旧还在原来的位置 var a = function(){ return "hello world"; } //函数声明语句,函数名称和函数体都提前了,可以在声明之前调用它 function b(){ return "world hello" } }
条件语句:
if else if switch
if(expression) statement if里面的expression必须要写,statement也是必须要写的语句。
switch可以处理多条分支的情况
switch(expression){
case (expression) :
statement;
break;
...........
default :
statement;
break;
}
在switch中假如没有break,那么语句会一直执行直到switch最后一条语句。
在函数中可以中return代替break。
case的匹配是使用"==="进行比较的,所以匹配的时候不会进行类型的转换。
switch的比较是从上到下的,default可以放到任何一个位置的。
循环
while do/while for for/in
do/while至少执行一次的循环,do是先执行语句,然后在通过while去进行判断
for/in是用来遍历一个对象的属性的
for(variable in object),即使object是一个原始值,也会转换成包装对象来遍历的。
但是遍历也是有条件的,只能遍历可枚举的属性,而javascript核心方法和对象属性都是不可枚举的,所以在遍历的时候这些都没有办法遍历出来,而自己定义的对象属性和方法就可以遍历出来。
如果for/in的循环体在还没有遍历到某属性的时候就删除了,那么这个属性就不会再获取到;如果for/in循环体中增加了一个某属性,那么它也不会被获取到。
属性枚举的顺序,一般来说通过属性定义的先后顺序来枚举的。