推荐书籍:
- 你不知道的JavaScript(先买上卷,适合进阶)
- 阮一峰的免费教程
- 网道
表达式
-
1+2表达式的值为3。
-
add(1,2)表达式的值为函数的返回值。
note:值和返回值不一样,只有函数才有返回值。
-
console.log表达式的值为函数本身。
-
console.log(3)表达式的值为undefined,但会打印出来3。
语句
- var a = 1是一个语句
Notes:
- 表达式一般都有值,语句可能有值,也可能没有。
- 语句一般会改变环境(声明、赋值)。
- 上面两句并不绝对。
JS区分大小写,例如:
var a和var A
object和Object
function和Function都是不同的含义
空格和回车
只要不影响断句,空格没有实际意思,回车大部分一样没有实际意思。
但return后不能加回车,否则会返回一个undefined!!!
标识符
变量名,第一个字符可以是Unicode字母,$,下划线或者中文。
注释
/ xxx /只能注释一行,而/* xxx */可以注释多行。
- 不好的注释:将代码翻译成中文的注释,无用过时的注释,发泄不满的注释。
- 好的注释:踩坑的注释,奇怪的代码和bug注释。
block区块
{
let a = 1;
let b = 2;
}
常与if,for和while一起用。
if...else...语句
-
语法
if(表达式){ 语句 1 } else { 语句 2 }Notes:
- { }在语句只有一句的时候可以省略,不建议这样做。
- if语句中还可以嵌套if else,同理else中也可以。
-
最推荐的写法:
if(表达式){ 语句 }else if(表达式){ 语句 }else{ 语句 } -
次推荐的写法:
function fn(){ if(表达式){ return 表达式 } if(表达式){ return 表达式 } return 表达式 }
switch 语句
不推荐,容易用错。
- 语法:
a = 2;
switch(a){
case 1:
case 3:
console.log('单数');
break;
case 2:
case 4:
console.log('双数');
break;
}
- break:
- 大部分时候,如果要使用switch,一定要记得使用break。
- 少部分时候,可以利用 break。
问号冒号表达式
简洁版的if...else...语句
-
语法:
表达示1?表达式2:表达式3;
&&短路逻辑(全真才真)
A&&B
若AB都为真,则取B的值,若A为假,则A&&B为假,
并不会取 true/false。
||短路逻辑(一真就真)
A||B
若A为真,则为真。若A为假,则看B,B为真则为真,B为假则为假。
如果能写成||或者&&,就绝对不写 if ...else...语句。
while循环语句
-
语法:
while(表达式){ 语句 }
- 首先判断表达式的真假。
- 当表达式为真,执行语句,执行完再判断表达式的真假。
- 当表达式为假,执行while后面的语句。
note:
var a=0.1
while(a!==1){
console.log(a)
a=a+0.1
}
会出现死循环,这是因为浮点数不精确造成的问题,永远到不了1。
而do...while语句用的不多,自行了解。
for循环语句
for是while循环的方便写法
-
语法
for(语句1;表达式2;语句3){ 循环体 }
- 先执行语句 1
- 然后判断表达式 2
- 如果为真,执行循环体,然后执行语句 3(break可以跳出循环)
- 如果为假,直接退出循环,执行后面的语句
例如:
for(var i=0;i<5;i++){
setTimeout(()=>{
console.log(i)
})
}
因为setTimeout是过一会时间才打印,过一会,for已经执行完,这时i=5,所以,会打印出五个5。而将var改成let的话,就会打出01234。
break 和 continue
- break:退出所有循环
note:break 只会退出离它最近的循环,如果是多for嵌套循环,不会全退。
- continue:退出当前循环
label 语句
foo:{
console.log(1);
break foo;
console.log('本行不会输出');
}
console.log(2);
输出 1 2
- 问:下面的东西是什么?
{
a:1;
}
答:不一个对象,a 是一个 label,它的语句就是一个 1。