JS 基本語法
表達式和語句
表達式
1 + 2
表達式的值為3
add(1+2)
表達式的值為函數(shù)的返回值
console.log
表達式的值為函數(shù)本身
console.log(3)
表達式的值為函數(shù)的返回值顶掉,為 undefined
語句
var a = 1
是一個語句
區(qū)別
- 表達式一般都有值,語句可能有也可能沒有
- 語句一般會改變環(huán)境(聲明挑胸、賦值)
大小寫敏感
-
var a
與var A
不同 -
object
與Object
不同 -
function
與Function
不同
空格
大部分空格無實際意義痒筒,即對縮進無要求
加回車也不影響,但return 后面不能加回車嗜暴,return 加回車后會默認返回 undefined
標識符
-
規(guī)則
第一個字符凸克,可以是 Unicode 字母(包括特殊字母)或 $ 或 _ 或中文,后面的字符還可以是數(shù)字
-
變量名是標識符
var _ = 1
var $ = 2
var 你好 = 'hi'
其他標識符用到再說
注釋
- 好的注釋
- 踩坑注釋
- 為什么代碼會寫得這么奇怪闷沥,遇到什么 bug
- 不好的注釋
- 翻譯代碼
- 過時的注釋,改了代碼沒改注釋
- 發(fā)泄不滿的注釋
條件語句
if
語法
if (表達式) {
語句1
}
else{
語句2
}
其中花括號 {} 在語句只有一句的時候可以省略
面試
-
表達式
if (a = 1)
一個等號意為賦值咐容,三個等號判斷相等 -
語句1 / 語句2
可以嵌套 if else
if (a > 10) { if (a > 100){ console.log('a 大于 100') } else{ console.log('a 大于 10 小于等于 100') } }
-
縮進
空格無意義舆逃,即縮進無意義
let a = 1 if (a === 2) console.log('a') console.log('a 等于 2') // a 等于 2 // 等價于下段代碼 let a = 1 if (a === 2) console.log('a') console.log('a 等于 2')
無歧義的寫法
-
最推薦
if (表達式) { 語句 }else if (表達式) { 語句 }else { 語句 }
-
次推薦
function fn(){ if (表達式) { return 表達式 } if (表達式) { return 表達式 } return 表達式 }
switch
語法
switch (color) {
case "red":
//...
break
case "green":
//...
break
default:
//...
}
大部分時候要加 break,不然會接著執(zhí)行下一條件戳粒,少部分時候可以不加使多個條件利用同一語句
switch (n) {
case 1:
case 3:
case 5:
console.log("單數(shù)")
break
case 2:
case 4:
case 6:
console.log("雙數(shù)")
break
default:
console.log("n 大于 6")
}
問號冒號表達式
語法
表達式1 ? 表達式2 : 表達式3
作用
function max(a,b){
return a > b ? a : b
}
簡化
function max(a,b){
if (a > b){
return a
}
return b
}
&&
語法
A && B && C && D
作用
取第一個假值或 D路狮,并不會取 true/false
常用
fn && fn()
如果函數(shù) fn 存在則調(diào)用,等價于
if (fn){
fn()
}
||
語法
A || B || C || D
作用
取第一個真值或 D蔚约,并不會取 true/false
常用
a = a || b
如果 a 不存在則將值 b 賦值給 a奄妨,等價于
if (!a){
a = b
}
循環(huán)語句
while
語法
while (表達式){
循環(huán)體
}
-
判斷表達式的真假
表達式為真時,執(zhí)行語句苹祟,再回到1
表達式為假時砸抛,跳出 while 循環(huán)评雌,執(zhí)行后面的語句
面試
var a = 0.1
while(a!== 1){
console.log(a)
a = a + 0.1
}
以上這種寫法會出現(xiàn)死循環(huán),因為 a 為浮點數(shù)直焙,多次運算后數(shù)值不準無法等于1
for
語法
for (語句1; 表達式2; 語句3){
循環(huán)體
}
執(zhí)行語句1
-
判斷表達式2
表達式為真時景东,執(zhí)行循環(huán)體,再執(zhí)行語句3奔誓,再回到2
表達式為假時斤吐,跳出 for 循環(huán),執(zhí)行后面的語句
面試
for (var i=0; i<5; i++){
setTimeout(()=>{
console.log(i+ ' ' + Math.random())
},0)
}
//5 0.9303787923523408
//5 0.6899538665840761
//5 0.6810474325114657
//5 0.6942935806091048
//5 0.3565866074885371
上述代碼中厨喂, setTimeout 中的語句會在 for 循環(huán)結(jié)束后再執(zhí)行和措,因此輸出的都是5
而將 var
改成 let
后就不再存在此特性
for (let i=0; i<5; i++){
setTimeout(()=>{
console.log(i+ ' ' + Math.random())
},0)
}
//0 0.4738938303873226
//1 0.47032133978554236
//2 0.12867142342927673
//3 0.8960148980685416
//4 0.8779046708652452
break
退出所有循環(huán)
continue
退出當前這次的循環(huán)
label
很少用,面試會考 5%
相當于定位符蜕煌,用于跳轉(zhuǎn)到程序的任意位置臼婆。標簽通常與break
語句和continue
語句配合使用,跳出特定的循環(huán)幌绍。
語法
foo: {
console.log(1)
break foo
console.log('本行不會輸出')
}
console.log(2)
面試
{
foo: 1
}
上述代碼不是對象颁褂。其中foo 是 label,語句是 1