Get Started
• 表达式、语句、标识符
• if … else语句
• while、for循环语句
表达式与语句
• 表达式
1+2表达式的值为3
add(1, 2)表达式的值为函数的返回值
console.log表达式的值为函数本身
console.log(3)表达式的值为undefined(这个函数打印出来的是3)
• 语句
var a = 1
值也是undefined
• 二者的区别
○ 表达式一般都有值,语句可能有也可能没有
○ 语句一般会改变环境(声明、赋值)
○ 上面两句话并不是绝对的
大小写敏感
不要写错
var a
和var A
是不同的
object和Object是不同的
function和Function是不同的
具体说明在后面
空格
• 空格没有什么实际含义(在不影响断句的情况下)
加回车大部分时候也不影响
只有一个地方不能加回车,那就是return后面(JS的特殊之处)
function {
return (undefined)
3
}
标识符
• 规则
第一个字符,可以是unicode字母或者 = 1
var ______ = 6
var 你好 = 'hi'
```
• 其他标识符用到再说
注释
• // 单行注释
• /* */ 多行注释
注释的分类
• 不好的注释
把代码翻译成中文
过时的注释
发泄不满的注释
• 好的注释
踩坑注释
为什么代码会写的这么奇怪,遇到什么bug
区块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')
若用逗号','将两句相连则都不执行,逗号代表这句话没完。分号';'则是这句话完了。
要用等于号就用===
,因为JS的==
很垃圾
程序员戒律:使用最没有歧义的写法
最推荐的写法
if (表达式) {
语句
} else if (表达式) {
语句
} else {
语句
}
次推荐写法
function fn(){
if (表达式) {
return 表达式
}
if (表达式) {
return 表达式
}
return 表达式
}
switch语句
• 语法(与C相似)
swutch(){
case 1:
case 2:
break;
case 3:
break;
defualt:
break;
}
• break
需要注意
问号冒号表达式
表达式1? 表达式2: 表达式3
&&短路逻辑
A&&B&&C&&D 取第一个假值或D
并不会取true/false
||短路逻辑
A||B||C||D取第一个真值或D
并不会取true/false
while循环
• 语法
while(表达式){语句}
判断表达式真假
当表达式为真,执行语句,执行完返回到while再判断
当表达式为假,跳出,执行while循环后面的语句
• 其他
do…while用的不多(note:在写C的时候公司会要求代码规则,一般不用这个)
坑:Chrome浏览器打印while(i<10)的时候会多一个10
但是while后面有别的代码的时候就是正常的
var 1 = 0 while(i<10){ console.log(i) i = i+1 } console.log('done')
坑:浮点数运算因精度问题有时得不到一个整数值,导致死循环
for循环
• 语法糖
for是while循环的方便写法
• 语法
for(语句1;表达式2;语句3){
循环体
}
先执行语句1,然后判断表达式2
若为真,执行循环体,然后执行语句3
若为假,直接跳出循环,执行后面的代码
代码:setTimeout是过一段时间执行,所以打印出来5个5
for(var 1 = 1 0; i < 5 ; i++){
setTimeout(()=>{
console.log(i)
},0)
}
↑for循环中若使用let,则会打印出0,1,2,3,4(将setTimeout特殊处理)
break和continue
退出所有循环(最近的一层循环)。退出当前一次循环
label语句
用的很少
• 语法
foo: {
console.log(1);
break foo;
console.log('本行不会输出');
}
console.log(2);
• 问题
{
foo: 1
}
上面的东西是什么
答案:这是一个label,它的语句就是1
Chrome做了优化会把它当成对象,后面加了个分号;
就输出1了
Firefox是标签foo的内容是1然后就输出1
ps:大部分都是与C语言相似
常用写法总结
• 条件语句
○ if … else …
○ switch
○ A ? B:C
○ A && B
○ fn && fn()
○ A || B
○ A = A || B