表达式与语句
两者区别
表达式一般都有值,语句可能有也可能没有
语句一般会改变环境(声明,赋值)
上面两句不绝对
表达式
1 + 2 表达式的值为 3
add(1,2)表达式的值为函数的返回值(只有函数有返回值)
console.log 表达式的值为函数本身
console.log(3) 表达式的值为 undefined
语句
var a = 1 是一个语句
大小写敏感
var a 和 var A 不同
object 和 Object 不同,function 和 Function 不同
空格&回车
大部分空格没有意义,但是回车不能加在 return 后面
标识符
规则
第一个字符可以是Unicode字母(注意不是英文字母)或 $ 或 _ 或 中文
后面的字符还可以有数字
变量名是标识符
var _ = 1
var $ = 2
var 你好 = ‘hi’
区块 block
把代码包在一起
常与 if / for / while 合用
条件语句
if语句
语法
if (表达式){语句1} else {语句2}
变态情况
- 表达式 a=1
- 语句1和语句2可以嵌套if-else
- 缩进
推荐写法
最好
if (表达式) {
语句
} else if (表达式) {
语句
} else {
语句
}
次推荐
function fn(){
if (表达式) {
return 表达式
}
if (表达式) {
return 表达式
}
return 表达式
}
switch语句
语法
switch (fruit) {
case "banana":
// ...
break;
case "apple":
// ...
break;
default:
// ...
}
break
大部分时候,每个case代码块内部的break语句不能少,否则会接下去执行下一个case代码块,而不是跳出switch结构。
问号冒号表达式
表达式1 ? 表达式2 : 表达式3
如果表达式1为true,则返回“表达式2”的值,否则返回“表达式3”的值。
&& 且 短路逻辑
用于多个表达式的求值
A && B && C && D
返回第一个布尔值为false的表达式的值 或 表达式D的值
使用场景:
|| 或 短路逻辑
A || B || C || D
取第一个真值或D
使用场景:
循环语句
while语句
while(表达式){语句}
如果表达式为真,执行语句,执行完毕再判断表达式的真假,当表达式为假,执行后面的语句
注意
- while没有返回值
- 死循环问题
- 浮点数问题
for循环
while的语法糖
语法
for (语句1①; 表达式2②; 语句3③) {循环体④}
先执行语句1,然后判断表达式2,如果为真,执行循环体,然后执行语句3;每轮循环判断表达式2,如果为假,则直接退出循环。
①②④③->②④③->②④③->②为false退出循环
break和continue
退出所有循环 v.s. 退出当前一次循环
注意:break只会退出离他最近的for
label
foo: {
console.log(1);
break foo;
console.log('本行不会输出');
}
console.log(2);
可以用来跳出双层循环
top:
for (var i = 0; i < 3; i++){
for (var j = 0; j < 3; j++){
if (i === 1 && j === 1) break top;
console.log('i=' + i + ', j=' + j);
}
}
// i=0, j=0
// i=0, j=1
// i=0, j=2
// i=1, j=0
foo是一个label,跟着的语句是1