表达式与语句
表达式
- 1 + 2表达式的值为3
- add(1,2)表达式的值为函数的返回值 (只有函数有返回值)
- console.log表达式的值为函数本身
语句
var a = 1是一个语句
二者的区别
- 表达式一般都有值,语句可能有也可能没有
- 语句一般会改变环境(声明、赋值)
- 上面两句话并不是绝对的
大小写敏感
- vara和varA是不同的 ,
- object和Object是不同的
- function 和 Function 是不同的
标识符 的规则
- 第一个字符,可以是Unicode字母或$或_或中文
- 后面的字符,除了上面所说,还可以有数字
变量名是标识符 ,
var _ = 1
var $ = 2
var __ = 6
var 你好 = 'h'
区块block
把代码包在一起
{
let a = 1
let b = 2
}
常常与if/for/while合用
if语句
语法
- if (表达式) {语句1} else {语句2}
- {}在语句只有一句的时候可以省略,不建议这样做
非常态情况
- 表达式里可以非常变态,如a = 1
- 语句1里可以非常变态,如嵌套的if else
- 语句2里可以非常变态,如嵌套的if else
- 缩进也可以很变态,如面试题常常下套
a = 1
if(a === 2)
console.log('a')
console.log('a等于2')
最终打出的是“a等于2”,if语句只能管一句
程序员的戒律:使用最没有歧义的写法
最推荐的写法:
if (表达式){
语句
} else if (表达式){
语句
} else {
语句
}
次推荐的写法(函数中):
function fn(){
if (表达式){
return 表达式
}
if (表达式){
return 表达式
}
return 表达式
}
switch语句
语法
switch (fruit) {
case "banana":
// ...
break;
case "apple":
// ...
break;
default:
// ...
}
大部分时候,省略break你就完了 ,少部分时候,可以利用break,因此不推荐用,能看懂就行。
问号冒号表达式
表达式1 ?表达式2 :表达式3
function max(a, b) {
if (a > b) return a;
else return b;
}
等同于
function max(a, b) {
return a>b ? a:b
}
if只有一个语句,else也只有一个语句的时候非常好用
&&短路逻辑
A&&B&&C&&D 取第一个假值或D 并不会取true/false
最常用的用法
console && console.log && console.log('hi');
||短路逻辑
A||B||C||D取第一个真值或D 并不会取true/false
a = a || 100; //如果a存在就等于a,否则等于100
等同于
if (a) {
a = a;
} else {
a = 100; //保底值
}
while 语法
while (表达式){语句}
- 判断表达式的真假
- 当表达式为真,执行语句
- 执行完再判断表达式的真假
- 当表达式为假,执行后面的语句
注意死循环
var = a+0.1
while (a!==1){
console.log(a)
a+0.1
}
也是死循环,因为浮点不稳定会跳过1
for循环
语法糖 ,
for是while循环的方便写法
语法
- for(语句1;表达式2;语句3){ 循环体 }
- 先执行语句1
- 然后判断表达式2
- 如果为真,执行循环体,然后执行语句3
- 如果为假,直接退出循环,执行后面的语句
break 和 continue
退出所有循环v.s.退出当前一次循环
for (var i = 0; i < 10; i++) {
for (var j = 100; j < 110; j++) {
if (i === 5) {
break;
}
}
console.log(i);
}
break只打断最近的一层循环,因此上述的i循环并没有被打断
label 语法
foo: {
console.log(1);
break foo;
console.log('本行不会输出1');
}
console.log(2);
面试可能会问到 { foo: 1 } 不是对象,是标签,内容是1