JS語(yǔ)法

表達(dá)式和語(yǔ)句

表達(dá)式

表達(dá)式有值
eg.console.log('3')
這就是一個(gè)表達(dá)式娄柳,因?yàn)槠溥\(yùn)行了以后會(huì)出值3

語(yǔ)句

語(yǔ)句無(wú)值
eg.let a=b柒瓣,運(yùn)行后無(wú)值

區(qū)別:

  1. 語(yǔ)句無(wú)值饵筑,表達(dá)式有
  2. 語(yǔ)句一般會(huì)聲明/賦值,從而改變環(huán)境
  3. 這些區(qū)別不絕對(duì)

坑:

  1. 大小寫(xiě)敏感,不要寫(xiě)錯(cuò)
  • var a 和 var A 是不同的
  • object 和 Object 是不同的
  • function 和 Function 是不同的
  1. 關(guān)于空格和回車(chē)
  • 只要不影響斷句果复,大部分空格沒(méi)有實(shí)際意義
    var a = 1 和 var a=1 沒(méi)有區(qū)別
  • 加回車(chē)大部分時(shí)候也不影響
  • g择伞<搿!澈驼!只有一個(gè)地方不能加回車(chē)辛燥,那就是 return 后面,加了回車(chē)會(huì)自動(dòng)隱性地補(bǔ)上 undefined缝其,回車(chē)后面的值不會(huì)上來(lái)挎塌。這是面試喜歡考的一個(gè)點(diǎn),面試不考常態(tài)只考變態(tài)内边。
  1. 語(yǔ)句和表達(dá)式變態(tài)情況:
  • console.log(3)表達(dá)值是undefined榴都,因?yàn)闆](méi)有名字為3這種可以調(diào)用的函數(shù),如果要打印3漠其,則需要console.log('3')加上‘’才可嘴高。
  • add(1,2) 表達(dá)值為函數(shù)的返回值
  • console.log 表達(dá)值為console.log本身
    Tips:
  1. 一個(gè)函數(shù)的函數(shù)名即是該函數(shù)的代表,也是一個(gè)變量和屎。由于函數(shù)名變量通常用來(lái)把函數(shù)的處理結(jié)果數(shù)據(jù)返回給調(diào)用函數(shù)拴驮,即遞歸調(diào)用,所以一般把函數(shù)名變量稱(chēng)為返回值柴信,函數(shù)的返回值類(lèi)型是在定義函數(shù)時(shí)指定的莹汤。
    也就是說(shuō),只有函數(shù)有返回值颠印,他的返回值就是他的值纲岭。

  2. 函數(shù)可以有返回值,也可以沒(méi)有返回值线罕。
    (1)沒(méi)有返回值的函數(shù):功能只是完成一個(gè)操作止潮,應(yīng)將返回值類(lèi)型定義為void,函數(shù)體內(nèi)可沒(méi)有return語(yǔ)句钞楼。
    (2)有返回值的函數(shù):函數(shù)的最后會(huì)有一個(gè)返回值return喇闸,可以用來(lái)獲取該函數(shù)執(zhí)行結(jié)果返回給該函數(shù),讓外部調(diào)用該函數(shù)的。

標(biāo)識(shí)符

  1. 第一個(gè)字符燃乍,可以是 Unicode 字母或$或_或中文
    Tips:Unicode 字母不只包含英文字母唆樊,還有希臘字母德語(yǔ)字母法語(yǔ)字母等,都可以用
  2. 后面的字符刻蟹,除了上面所說(shuō)逗旁,還可以有數(shù)字
  3. 變量名是標(biāo)識(shí)符
    eg
var _=1
var $=2
var ______=6
var 你好='hi'

都是合理的。
Tips:

  1. 最好不要用多于2個(gè)_作為變量名舆瘪,因?yàn)楹茈y判斷有幾個(gè)

區(qū)塊 block

是用來(lái)把代碼包在一起片效,也就是{}這個(gè)東西

{
let a=1
let b=2
}

block 一般不會(huì)單獨(dú)用,一般是跟if/for/while一起用

if 語(yǔ)句

  • if(表達(dá)式){語(yǔ)句 1}else{語(yǔ)句 2}
  • {}在語(yǔ)句只有一句的時(shí)候可以省略英古,不建議這樣做

  • 表達(dá)式里有坑淀衣,
    eg. a=1
  • 語(yǔ)句里有時(shí)候會(huì)嵌套的 if else
    eg.
if(a<100)
else if(a>1000){console.log('a')}
else{console.log('b')}

這里出現(xiàn)了else if只是因?yàn)橛行r(shí)候可以省略{},完整的是

if(a<100){}
else{ if(a>1000){console.log('a')}
else{console.log('b')}}

其實(shí)這個(gè)是兩個(gè)if else語(yǔ)法召调,省略了一些{}出現(xiàn)的else if膨桥,并沒(méi)有這個(gè)else if的語(yǔ)法

  • 縮進(jìn)也有坑,
    eg
a=1
if(a===2)
  console.log('a')
  console.log('a等于2')

最后運(yùn)行會(huì)出現(xiàn)a等于2唠叛,因?yàn)檫@里是省略了{(lán)}只嚣,如果省略這個(gè)只能管到后面一句代碼
也就是

a=1
if(a===2){
  console.log('a')}
  console.log('a等于2')

如果是

a=1
if(a===2)
  console.log('a')  console.log('a等于2')

答案一樣,因?yàn)槭枪芤痪涠皇且欢尾J琷s中加回車(chē)大部分時(shí)候也不影響代碼運(yùn)行介牙。
但是若是

a=1
if(a===2)
  console.log('a'),console.log('a等于2')

最后是undefined壮虫。因?yàn)槎禾?hào)表示這句話沒(méi)完澳厢,這兩個(gè)語(yǔ)句突然就變成了一個(gè)語(yǔ)句。分號(hào)的話囚似,就表示這句話完了剩拢。

最推薦使用的寫(xiě)法

if(表達(dá)式){
  語(yǔ)句
}else if(表達(dá)式){
  語(yǔ)句
}else{
  語(yǔ)句
}
復(fù)制代碼

永遠(yuǎn)不要省略花括號(hào),就算里面只有一句也不要省略花括號(hào)饶唤。

次推薦使用的寫(xiě)法

function fn(){
  if(表達(dá)式){
    return 表達(dá)式
  }
  if(表達(dá)式){
    return 表達(dá)式
  }
  return 表達(dá)式
}

switch 語(yǔ)句 徐伐,不推薦

eg

switch(fruit){
case 'banana':console.log('banana')
break;
case 'apple':console.log('apple')
break;}

意思是,在fruit這個(gè)東西里面募狂,如果出現(xiàn)是banana的情況办素,就console.log('banana');如果出現(xiàn)apple的情況祸穷,就console.log('apple')性穿。

  • 大部分時(shí)候,省略 break 你就完了雷滚,如果要使用一定要記得使用break
  • 少部分時(shí)候需曾,可以利用 break

問(wèn)號(hào)冒號(hào)表達(dá)式(三元表達(dá)式)

語(yǔ)法

表達(dá)式 1?表達(dá)式 2:表達(dá)式 3
Tips:

  1. 能用問(wèn)號(hào)冒號(hào)的時(shí)候,就不要用 if else
  2. 只可以用于if else里語(yǔ)句都只有一句的情況
    eg
function max(a,b){
  return a>b?a:b
}

其實(shí)是如下代碼

function max(a,b){
  if(a>b)return a;
  else return b;
}

&& 短路邏輯

A&&B&&C&&D取第一個(gè)假值,若都為真呆万,則取D商源,并不會(huì)取 true/false
eg.

window.f1&&console.log('f1存在')

就是

if(window.f1){
  console.log('f1存在')
}

||短路邏輯

A||B||C||D取第一個(gè)真值,若全是假取 D谋减,并不會(huì)取 true/false

a||b

就是

if(!a){
  b
}else{}

Tips:

  1. 牡彻!a代表如果a不是真的意思
a=a||100

就是

if(a){
  a=a
}else{
  a=100//保底值
}

前端程序員如果能寫(xiě)成||,就絕對(duì)不寫(xiě) if else

總結(jié)

條件語(yǔ)句

  • if...else...
  • switch
  • A?B:C
  • fn&&fn()
  • A||B
  • A=A||B

while 循環(huán)逃顶,當(dāng)...時(shí)

語(yǔ)法

eg

while(true){}
  • while(表達(dá)式){語(yǔ)句}
  • 判斷表達(dá)式的真假
  • 當(dāng)表達(dá)式為真讨便,執(zhí)行語(yǔ)句,執(zhí)行完再判斷表達(dá)式的真假
  • 當(dāng)表達(dá)式為假以政,執(zhí)行后面的語(yǔ)句

坑(考點(diǎn))

var a=0.1//初始化
while(a!==1){//判斷
  console.log(a)//循環(huán)體
  a=a+0.1//增長(zhǎng)
}

會(huì)出現(xiàn)死循環(huán)霸褒,這是因?yàn)樯厦娴母↑c(diǎn)數(shù)不精確造成的問(wèn)題,所以+0.1可能加著加著就會(huì)變成0.999而不是1盈蛮,所以永遠(yuǎn)到不了1

其他

  • do...while废菱,用的不多

for 循環(huán)

  • for 是 while 循環(huán)的方便寫(xiě)法,for 循環(huán)是 while 循環(huán)的升級(jí)寫(xiě)法
  • while 循環(huán)有一個(gè)問(wèn)題是抖誉,你如果缺了一部分就會(huì)死循環(huán)殊轴,比如說(shuō)沒(méi)有寫(xiě)初始化,死循環(huán)袒炉,沒(méi)有寫(xiě)判斷或者判斷寫(xiě)錯(cuò)了旁理,死循環(huán),你沒(méi)有寫(xiě)循環(huán)體我磁,那你循環(huán)也沒(méi)什么用孽文,沒(méi)有寫(xiě)增長(zhǎng),死循環(huán)

語(yǔ)法

for(語(yǔ)句 1;表達(dá)式 2;語(yǔ)句 3){ 循環(huán)體 }

  • 先執(zhí)行語(yǔ)句 1(語(yǔ)句 1 是用來(lái)初始化的)
  • 然后判斷表達(dá)式 2(表達(dá)式 2 是用來(lái)判斷的)
  • 如果為真夺艰,執(zhí)行循環(huán)體芋哭,然后執(zhí)行語(yǔ)句 3(語(yǔ)句 3 是自增用的)
  • 如果為假,直接退出循環(huán)郁副,執(zhí)行后面的語(yǔ)句
  • 注意:如果表達(dá)式 2 成立减牺,先執(zhí)行循環(huán)體,執(zhí)行語(yǔ)句 3存谎,注意這個(gè)拔疚,這是考點(diǎn)。執(zhí)行循環(huán)體后既荚,一定會(huì)去執(zhí)行語(yǔ)句 3稚失,除非你有 break。

for(var i=0;i<5;i++){
    console.log(i)
}

問(wèn):i的值和打印的情況
答:i=5固以,且打印結(jié)果為0墩虹,1嘱巾,2,3诫钓,4旬昭,因順序問(wèn)題,如果表達(dá)式 2 成立菌湃,先執(zhí)行循環(huán)體问拘,執(zhí)行語(yǔ)句 3,這個(gè)時(shí)候如果表達(dá)式2不成立就不打印惧所,但是已經(jīng)循環(huán)到i=5的情況了骤坐。

for(var i=0;i<5;i++){
  setTimeout(()=>{
    console.log(i)
  },0)
}

問(wèn):最后打印出來(lái)的結(jié)果。

答:五個(gè)5下愈,因?yàn)?setTimeout 過(guò)一會(huì)時(shí)間才打印纽绍,等過(guò)一會(huì),for已經(jīng)執(zhí)行完了势似,這個(gè)時(shí)候i=5拌夏,所以,打印出五個(gè) 5履因。不在于 for 循環(huán)障簿,在于 setTimeout 的時(shí)間問(wèn)題,這里i++的意思就是每次加1.

var a=1
function fn(){
  console.log(a)
}

問(wèn):打印出 a栅迄,a 的值是多少站故?

答:不確定。因?yàn)?a 現(xiàn)在等于 1毅舆,但不知道什么時(shí)候執(zhí)行 fn西篓。a 的值可能會(huì)變,如果不確定函數(shù)是什么時(shí)候執(zhí)行的朗兵,永遠(yuǎn)不能確定 a 的值是多少污淋。所以如果我不能確定 fn()的調(diào)用時(shí)間顶滩,我是不能說(shuō) a 的值的余掖。


# break 和 continue

## 退出所有循環(huán) V.S.退出當(dāng)前一次循環(huán)

注意:break 只會(huì)退出離它最近的循環(huán),不會(huì)全退

# label 語(yǔ)句

## 用的很少礁鲁,面試會(huì)考(概率 5%)

### 語(yǔ)法

foo:{
console.log(1);
break foo;
console.log('本行不會(huì)輸出');
}
console.log(2);


### 面試

{
foo:1
}


*   問(wèn):上面的東西是什么

*   答:foo 是一個(gè) label盐欺,它的語(yǔ)句就是一個(gè) 1

## 推薦書(shū)籍

### 阮一峰的免費(fèi)教程

*   [入門(mén)篇](https://link.juejin.im?target=http%3A%2F%2Fwangdoc.com%2Fjavascript%2Fbasic%2Fgrammar.html)

### 《你不知道的 JavaScript》

*   先買(mǎi)上卷,適合進(jìn)階

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末仅醇,一起剝皮案震驚了整個(gè)濱河市冗美,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌析二,老刑警劉巖粉洼,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件节预,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡属韧,警方通過(guò)查閱死者的電腦和手機(jī)安拟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)宵喂,“玉大人糠赦,你說(shuō)我怎么就攤上這事」兀” “怎么了拙泽?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)裸燎。 經(jīng)常有香客問(wèn)我顾瞻,道長(zhǎng),這世上最難降的妖魔是什么德绿? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任朋其,我火速辦了婚禮,結(jié)果婚禮上脆炎,老公的妹妹穿的比我還像新娘梅猿。我一直安慰自己,他們只是感情好秒裕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布袱蚓。 她就那樣靜靜地躺著,像睡著了一般几蜻。 火紅的嫁衣襯著肌膚如雪喇潘。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,718評(píng)論 1 305
  • 那天梭稚,我揣著相機(jī)與錄音颖低,去河邊找鬼。 笑死弧烤,一個(gè)胖子當(dāng)著我的面吹牛忱屑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播暇昂,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼莺戒,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了急波?” 一聲冷哼從身側(cè)響起从铲,我...
    開(kāi)封第一講書(shū)人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎澄暮,沒(méi)想到半個(gè)月后名段,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體阱扬,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年伸辟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了价认。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡自娩,死狀恐怖用踩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情忙迁,我是刑警寧澤脐彩,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站姊扔,受9級(jí)特大地震影響惠奸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜恰梢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一佛南、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嵌言,春花似錦嗅回、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至苛白,卻和暖如春娃豹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背购裙。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工懂版, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人躏率。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓躯畴,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親禾锤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子私股,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容