表达式是由运算符构成,并运算产生结果的语法结构。每个表达式都会产生一个值,它可以放在任何需要一个值的地方,比如,作为一个函数调用的参数.下面的每行代码都是一个表达式:
var a = (5 + 6) / 2//表达式:(5 + 6) / 2
var b = (function(){ return 25})()//表达式: (function(){ return 25})()
foo(a*b)//表达式:a*b
2.语句(statements)
语句则是由“;(分号)”分隔的句子或命令。如果在表达式后面加上一个“;”分隔符,这就被称为“表达式语句”。它表明“只有表达式,而没有其他语法元素的语句”。
var a = (5 + 6) / 2//整行,赋值语句
if(a>12) { statements} //条件语句
var o = {}//赋值语句
(function(obj){ obj.b = 23})(o||{})//表达式语句
一般的javascript中的语句分为下面几种:
(1)声明语句:变量声明和函数声明
(2)赋值语句
(3)控制语句:能够对语句执行顺序产生改变,包括条件语句和循环语句,当然还有比较特殊的标签语句。
(4)表达式语句:这些语句去掉最后分号,都也可当表达式用的。常见的有:对象操作(new、delete)、函数调用(函数执行,必有返回值)等。
var num = 9//声明、赋值语句
vloop: //标签语句
{//其实这里大括号可以不需要的,在这里我只想向大家展示一下这种代码块结构而已
for(var i=1i<10i++) { //循环语句
if(i==num){ //条件语句
break vloop
}else{
num = num - 1
}
}
}
console.log(num)//表达式语句,输出:5
由上面可以看出,表达式和语句还是存在很大区别的,可也说表达式是语句的构成部分,而语句则又可以组成可执行代码块。
for (var i = 0 i < nodes1.length i++) {if (nodes1[i].nodeName == "P" && nodes1[i].nodeType == 1) {
if(i%2==0){
nodes1[i].style.backgroundColor = "yellow"
}else{
nodes1[i].style.backgroundColor = "red"
}
}
}
if(){}else{} 是语句,是没有返回值的,而三元表达式则是表达式,是可以直接赋值的。所以你不能想当然就这么用。
如果你真想获得类似三元表达式的效果,可以这样:
for (var i = 0 i < nodes1.length i++) {if (nodes1[i].nodeName == "P" && nodes1[i].nodeType == 1) {
nodes1[i].style.backgroundColor = function(){
if(i%2==0){ //把if语句放入一个匿名函数中
return "yellow"
}else{
return "red"
}
}() //立即执行这个匿名函数
}
}