🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
#### 一、语句和表达式 任何语句都有返回值,也就是你在控制台按下回车时控制台打印出的结果。变量声明返回的是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; } ```