参考文献
对JS的态度
- JS问题很多, 取其精华, 去其糟粕
- JS是世界上使用最广的语言, JS是门槛极低的语言
- JS是有三座高山
表达式&语句
语句
- var a = 1 是一个语句
- JavaScript 程序的执行单位为行(line),也就是一行一行地执行。一般情况下,每一行就是一个语句。
表达式
表达式不需要分号结尾。一旦在表达式后面添加分号,则 JavaScript 引擎就将表达式视为语句,这样会产生一些没有任何意义的语句。
1 + 3;
'abc';
//两行语句只是单纯地产生一个值,并没有任何实际的意义。
- 1+2 表达式的值为3
- add(1,2) 表达式的值为 函数的返回值
- console.log 表达式的值为函数本身
- console.log(3) 表达式的值是
两者的区别是
- 表达式 一般都有值 | 语句 可能有,可能没
- 语句一般不会改变环境 (声明\赋值)
- 以上两句话都不是绝对
变量
变量是对“值”的具名引用。变量就是为“值”起名,然后引用这个名字,就等同于引用这个值。变量的名字就是变量名。
var a = 1;
---
变量的声明和赋值,是分开的两个步骤,上面的代码将它们合在了一起,实际的步骤是下面这样。
var a;
a = 1;
大小写敏感
Var a 和 var A , object 和Object 这些都是是不同的
空格 回车 不敏感
但return后面不能加回车,会变undefined
标识符
变量名是标识符
规则
数字只能第二位开始, 第一个字符可以是Unicode字母或其他,也能是中文
举例
var _=1
var$=2
var 你好 = 3 //中文是合法的标识符,可以用作变量名。
以上都是可以的
var 9$ = 1 // 这就是错的
不合法标识符
1a // 第一个字符不能是数字
23 // 同上
*** // 标识符不能包含星号
a+b // 标识符不能包含加号
-d // 标识符不能包含减号或连词线
JavaScript 有一些保留字,不能用作标识符:arguments、break、case、catch、class、const、continue、debugger、default、delete、do、else、enum、eval、export、extends、false、finally、for、function、if、implements、import、in、instanceof、interface、let、new、null、package、private、protected、public、return、static、super、switch、this、throw、true、try、typeof、var、void、while、with、yield。
注释 //是一行, /**/是注释多行
不好的注释
- 把代码翻译成中文
- 发泄不满的注释
好的注释
- 踩坑的注释
- 为什么代码写的这么奇怪,遇到什么BUG
区块 block
- 把代码包起来 { let a = 1 let b = 2 }
- 常和 if/for/while 合用
if语句
语法
- if(表达式){语句1} else {语句2}
- {}在语句只有一句的时候, 可以省略 , 但不建议
变态情况
- 表达式里可以非常变态, 如 a=1
- 语句1 里可以非常变态, eg: 嵌套的if else
- 语句2 里可以非常变态, eg: 嵌套的if else
- 缩进也可以非常变态
eg:
a=1
if(a===2)
console.log('a')
console.log('a等于2')
最推荐使用的写法
if (表达式) {
语句
}else if (表达式){
语句
} else{
语句
}
次推荐写法
function fn(){
if (表达式){
return 表达式
}
if (表达式){
ruturn 表达式
}
switch 语句 (if else 升级版,容易用错)
语法
switch (fruit) {
case "banana"
// ...
break;
case"apple"
// ...
break;
default:
// ...
}
break
- 大部分时候, 省略break 会出问题
- 少部分时候, 可以利用break
问号冒号 表达式
if里面只有一个语句, else里面也只有一个语句 的时候, 问号冒号 表达式很好用.
eg:
function max(a,b){
if(a>b) return a;
else return b;
}
---
function max(a>b){
return a>b ? a: b
}
function abs(n){
return n>0 ? n ; -n
} //如果n>0返回n,else 给-n
&&短路逻辑
- A&&BC&&D 取第一个假值或D
- 如果A是假就取A,如果B是假就取B....如果都不是假就取D
- 并不会取 true / flase ,永远都是A\B\C\D 其中一个
eg:
if(window.f1){
console.log('存在')
}
---可以这么写
window.f1 && console.log('存在') //如果前面的是真值,会求后面的值
A&&B 逻辑
| A&&B | 真 | 假 | |-:-|-:-|-:-| | 真 | B | B | | 假 | A | A |
- 如果前面是假, 就看前面, 把假返回
- 如果前面是真, 就看后面, 把后面返回
||短路逻辑
- A||B||C||D 取第一个真值,或者D
eg:
a || b //a不是真, 执行后面的b
//等同于以下的
if(!a){
b
}
---
a = a || 100
//等同于下面的
if(a){
a=a
}else{
a =100 //保底值
}
while 循环 //当...时
语法
- while (表达式) {语句}
- 判断表达式的真假
- 当表达式是真, 执行语句, 执行完再判断表达式真假
- 当表达式是假, 执行后面的语句
- do...while
- 当心浮点数问题
for 循环
- for是while循环的方便写法
语法
- for(语句1;表达式2;语句3){ 循环体 }
- 先执行语句1,再普安但表达式2 -如果真,执行循环体,再执行语句3
- 如果假,退出循环 , 执行后面的语句
eg
var a = 0.1 // 初始化, 声明
while (a !===1) // 判断, 表达式
{
console.log(a) // 循环体
a = a + 0.1// 自增
}
--- 上面可以用for写成下面
for( var a=0.1; a !==1; a=a+0.1 ){
console.log(a)
} // var 可以写外面, 中间的判断和执行增量不写 会死循环console.log
break 和 continue
- break 退出所在的block所有循环,或者叫最近的一个for
- continue 退出当前一次循环
eg
for (var i = 0; i <10 , i++){
if (i%2===1{ //单数,我就break
break // 退出循环
continue// 过,下一个 ,跳过
}
}// i%2===1 的意思是i除以2的余数,等于1,相当于单数
余数 公式
a mod b = c表示 整数a除以整数b所得余数为c。7 mod 2 = 7-⌊7/2⌋*2=7-3*2=10 mod 2 = 0-⌊0/2⌋*2=0-0*2=0
label
不太用,面试可能会考
语法
问下面的代码是什么
{
a:1 //a 是一个labbel , 语句就是1
}
eg:
foo:{
console.log(1);
break foo; // 退出foo
console.log('本行不会输出')
}
console.log(2);
总结
- if...else
- switch
- A?B:C //常用
- A&&B //常用
- fn&&fn() //常用
- A||B //A或者B
- A=A||B //常用写法, A=A 或者B