#### 一、语句和表达式
任何语句都有返回值,也就是你在控制台按下回车时控制台打印出的结果。变量声明返回的是undefined,执行一个函数如果有return的话则打印return的值,否则依旧是undefined
```
var a = 42;
//undefined
b = 2;
//2
function func() { a = 43;}
//undefined
func();
//undefined
function func1() {return 42;}
func1();
//42
```
逗号可以将多个独立的语句串成一个表达式
```
var a = 42;
var b = (a++, a);
//相当于a++;var b = a;
a; //43
b; //43
```
组合赋值运算符总是从右往左
```
a = b += 2;
//先执行b += 2,然后执行a = b
a = b = c;
//先执行b = c,然后执行a = b
var a = b = 42;
//如果b从未声明过,则b会称为全局变量
```
让代码更加简洁
```
function func(str) {
var matches;
if(str) {
matches = str.match(/\d/g);
if(matches) return matches;
}
}
//简化
function func(str) {
var matches;
if(str && (matches = str.match(/\d/g))) return matches;
}
```
代码块
```
//[]和{}均被转成字符串
[] + {}; //"[object Object]"
//{}被当成空代码块,该语句相当于变成了+[]
{} + []; //0
```
js是没有else if的
```
else if(b) {...}
//其实是
else {
if(b) {... }
}
```
#### 二、运算符优先级
&& > || > ?和:
```
a && b || c ? c || b ? a : c && b : a
(a && b || c) ? (c || b) ? a : (c && b) : a
((a && b) || c) ? ((c || b) ? a : (c && b)) : a
```
#### 三、自动分号
#### 四、错误
#### 五、函数参数
#### 六、try catch finally
无论try catch中有何种语句(包括return),最终都会走到finally。
```
function func() {
try {return 42;}
finally {console.log('hello')}
}
func();
//'hello'
//42
//try语句会先执行并return 42,由于还有finally存在,函数要在finally执行完后才能return
```
```
//throw和return同理,continue和break也是一样,都是finally完后才执行
function func() {
try {throw 42;}
finally {console.log('hello')}
}
func();
//'hello'
//Uncaught Exception: 42
```
```
//如果finally中有异常,则try中的return将会被丢弃
function func() {
try {return 42;}
finally {throw 42;}
}
func();
//Uncaught Exception: 42
```
switch特殊用法
```
switch(true) {
case a == 10: ... break;
case a == 11: ... break;
default: break;
}
```
- 你不知道的JS上
- 第一部分 第三章 函数作用域和块作用域
- 第一部分 第四章 提升
- 第一部分 第五章 闭包
- 第二部分 第一章 关于this
- 第二部分 第二章 this全面解析
- 第二部分 第三章 对象
- 第二部分 第五章 原型
- 第二部分 第六章 行为委托
- 你不知道的JS中
- 第一部分 第二章 值
- 第一部分 第三章 原生函数
- 第一部分 第四章 强制类型转换
- 第一部分 第五章 语法
- 第二部分 第一章 异步
- 第二部分 第三章 Promise
- 第二部分 第四章 生成器
- 第二部分 第五章 性能
- 你不知道的JS下
- 第一部分 总结
- 第二部分 第二章 语法
- 第二部分 第三章 代码组织
- 第二部分 第四章 Promise
- 第二部分 第五章 集合
- 第二部分 第六章 新增API
- 第二部分 第七章 元编程
- 第二部分 第八章 ES6之后