什么是表达式和语句
表达式:产生一个值语句
语句:执行一个操作
表达式
1+2 //值为3
add(1,2) //表达式的值为函数的返回值
console.log //表达式的值为函数本身
console.log(3) //表达式的值为多少? undefined
语句
var a = 1 //是一个语句
二者区别:
- 表达式一般都有值,语句有可能有也可能没有值。
- 语句一般会改变环境(声明、赋值)
标识符的规则
规则
第一个字符,可以说Unicode
字母或$
或-
或中文
后面的字符,除了上面说的,还可以有数字
变量名是标识符
var - = 1
var $ = 1
var --- = 6
var 你好 = 'hi'
if else 语句(如果…那么…)
语法
if(表达式){语句1}else{语句2}
- 语句1与语句2可以嵌套多个if-else
var a = 2;
var b = 3;
if (a === 2) {
if (b === 3) {
console.log('a等于2,b等于3')
}
else {
console.log('a等于2,b不等于3');
}
}
else {
if (b === 3) {
console.log('a不等于2,b等于3')
}
else {
console.log('a不等于2,b不等于3');
}
}
//打印出a等于2,b等于3
踩坑例子
a=1;
if(a=2){
console.log(a)
}
//打印出2
原因:若在if语句前已经赋值,而在表达式再次赋值时,a的值会被覆盖
a = 1
if(a === 2)
console.log('a')
console.log('a等于2')
//打印出a等于2
原因:if后面没有括号时,为真时执行的语句默认只为1条
缩写
问号冒号表达式
表达式1?表达式2:表达式3
&&短路逻辑
A && B && C && D取第一个假值或D
||短路逻辑
A || B || C || D取第一个真值或D
总结
- 条件语句
- if…else…
- switch
- A ? B : C
- A && B
- fn && fn()
- A || B
- A = A || B
while for 语句(当…时)
while
语法:while(表达式){循环体}
- 当表达式为真时,执行括号里的语句
- 当表达式为加时,执行循环后面的语句
踩坑例子
var a=0.1;
while(a!=1){
console.log(a);
a=a+0.1
}
//该循环是死循环
原因:a与浮点数做加法运算时,浮点数会不精确,会跳过1,造成死循环
for循坏
语法:for(语句1;表达式;语句2){循环体}
- 先执行语句1
- 判断表达式,为真时执行循环体,执行语句2,再判断表达式
- 表达式为假时,跳出循环体
注意:表达式不可为空,否则为死循环
踩坑例子
for (var i = 0; i < 5; i++) {
setTimeout(() => {
console.log(i);
}, 0);
}
//打印出55555
原因:setTimeout有延时的功能,会执行完for循环才会调用setTimeout函数
for (let i = 0; i < 5; i++) {
setTimeout(() => {
console.log(i);
}, 0);
}
//打印出01234
原因:ES6更新了let,让let更符合“一般人”的思路
break && continue(退出所有循坏V.S.退出当前一次循坏)
- break:跳出所有循环
- continue:跳出一次循环
var a = 1;
if (a === 1) {
for (var i = 0; i < 5; i++) {
if (i === a) {
console.log('这时a=i');
continue;
}
console.log( i);
}
}
//打印出 0 这时a=i 2 3 4
var a = 1;
if (a === 1) {
for (var i = 0; i < 5; i++) {
if (i === a) {
console.log('这是a=i');
break;
}
console.log( i);
}
}
//打印出 0 这时a=i
label(不常用,但是面试会考)
语法:
label:
statement;
label:任何不属于保留关键字的 JavaScript 标识符。
statement:JavaScript 语句。
踩坑例子
foo: {
console.log(1);
break foo;
console.log('本行不会输出');
}
console.log(2);
注意:{foo:1}不是对象,是label