基礎(chǔ)語(yǔ)法

基礎(chǔ)語(yǔ)法

一、基礎(chǔ)語(yǔ)法

1、變量

概念:內(nèi)存中存儲(chǔ)數(shù)據(jù)的一個(gè)容器。

聲明方式:

var 變量名 // 在內(nèi)存中開(kāi)辟了一個(gè)空間
var 變量名 = 值 // 內(nèi)存中開(kāi)辟空間并放入數(shù)據(jù)

變量名的規(guī)則:變量名由字母、數(shù)字、下劃線、美元符號(hào)、漢字組成,不能用數(shù)字開(kāi)頭,不能將關(guān)鍵字作為變量名。

關(guān)鍵字:

var typeof isNaN Number String Boolean Object Array Function function break if else switch case default for while do continue in of Date top window new this Math

=在代碼中不叫等于賦值符。左邊一定是一個(gè)即將放入數(shù)據(jù)的變量,右邊一定是具體的數(shù)據(jù)或能得到具體數(shù)據(jù)的表達(dá)式,作用是將右邊的數(shù)據(jù)放入左邊的變量中。

2、數(shù)據(jù)類型

js中的數(shù)據(jù)類型:

  • number:數(shù)字類型

    isNaN(數(shù)據(jù)) - 判斷數(shù)據(jù)轉(zhuǎn)成數(shù)字是否是NaN

    小數(shù)計(jì)算不精準(zhǔn):

    原因:計(jì)算機(jī)內(nèi)部對(duì)數(shù)字的處理要轉(zhuǎn)成二進(jìn)制,小數(shù)轉(zhuǎn)二進(jìn)制有時(shí)會(huì)轉(zhuǎn)成無(wú)限死循環(huán),導(dǎo)致計(jì)算機(jī)存儲(chǔ)小數(shù)不精準(zhǔn),所以計(jì)算結(jié)果也不精準(zhǔn)。

    解決:

      ① 先乘以10的n次方將兩個(gè)數(shù)字都轉(zhuǎn)成整數(shù),計(jì)算,除以10的n次方
    
      ② 數(shù)字.toFixed(數(shù)字) - 強(qiáng)制保留小數(shù)點(diǎn)后幾位
    
  • string:字符串類型

    字符串可以進(jìn)行+運(yùn)算,將兩個(gè)小字符串拼接成更大的字符串

    用document.write輸出標(biāo)簽,必須將標(biāo)簽當(dāng)做字符串輸出,才能在頁(yè)面中解析標(biāo)簽

    單引號(hào)字符串不能嵌套單引號(hào)字符,雙引號(hào)字符串不能嵌套雙引號(hào)字符,除非將引號(hào)字符轉(zhuǎn)義:\

  • boolean:布爾值 - 描述一個(gè)條件的成立與不成立,只有兩個(gè)數(shù)據(jù):true/false

  • undefined:未定義 - 當(dāng)一個(gè)變量定義了但沒(méi)有賦值,值就是undefined(淺灰色),類型也是undefined(黑色字符串)

  • object:對(duì)象 - 復(fù)雜的數(shù)據(jù),一個(gè)空間存儲(chǔ)多個(gè)數(shù)據(jù)

  • function:函數(shù) - 存儲(chǔ)一段代碼的變量

3、運(yùn)算

  • 算術(shù)運(yùn)算

    符號(hào):

    + - * / %
    
  • 賦值運(yùn)算

    +=  -=  *=  /=  %=
    

    是簡(jiǎn)寫(xiě)

  • 比較/關(guān)系運(yùn)算

    > >= < <= == === != !==
    

    !=和!==是==和===的取反

  • 邏輯運(yùn)算

    &&   ||   !
    

4、類型轉(zhuǎn)換

4.1、隱形轉(zhuǎn)換

  • +左右兩邊有一個(gè)是字符串,另一個(gè)也會(huì)轉(zhuǎn)成字符串進(jìn)行拼接
  • 算術(shù)運(yùn)算符號(hào)會(huì)將左右兩邊都轉(zhuǎn)成數(shù)字進(jìn)行算數(shù)運(yùn)算
  • 比較運(yùn)算左右兩邊有一個(gè)是數(shù)字,另一個(gè)也會(huì)轉(zhuǎn)成數(shù)字進(jìn)行數(shù)字的大小比較
  • 數(shù)據(jù)放在分支語(yǔ)句的小括號(hào),會(huì)隱形轉(zhuǎn)成布爾類型
  • 非字符串?dāng)?shù)據(jù)作為對(duì)象的屬性,會(huì)隱形轉(zhuǎn)成字符串類型

4.2、強(qiáng)制轉(zhuǎn)換

  • 轉(zhuǎn)數(shù)字

    Number(數(shù)據(jù)):

    轉(zhuǎn)成數(shù)字純數(shù)字字符串

    空字符串、null、[]轉(zhuǎn)成0,其余數(shù)據(jù)都轉(zhuǎn)成NaN

    parseInt(數(shù)據(jù)):只有整數(shù)開(kāi)頭的字符串能轉(zhuǎn)成整數(shù),其余的都是NaN

    parseFloat(數(shù)據(jù)):只有數(shù)字開(kāi)頭的字符串能轉(zhuǎn)成數(shù)字,其余的都是NaN

  • 轉(zhuǎn)布爾類型

    Boolean(數(shù)據(jù)):0、空字符串、null、undefined轉(zhuǎn)成false,其余的都是true

  • 轉(zhuǎn)成字符串

    String(數(shù)據(jù)):數(shù)組轉(zhuǎn)字符串,去除了[];對(duì)象轉(zhuǎn)字符串 - '[object Object]'

    數(shù)據(jù).toString():null和undefined不能使用,其余的結(jié)果跟上面一樣

二、分支語(yǔ)句

概念:做判斷的結(jié)構(gòu)

1、單分支

if(條件) {
   當(dāng)條件為true的時(shí)候執(zhí)行的代碼段
}

2、雙分支

if(條件) {
   當(dāng)條件是true的時(shí)候執(zhí)行的代碼段
} else {
   當(dāng)條件為false的時(shí)候執(zhí)行的代碼段
} 

3、多分支

if(條件1) {
    當(dāng)條件1是true的時(shí)候執(zhí)行的代碼段
} else if(條件2) {
    當(dāng)條件2是true的時(shí)候執(zhí)行的代碼段      
} else if(條件3){
    當(dāng)條件3是true的時(shí)候執(zhí)行的代碼段             
}...
else{
    上面條件都是false的時(shí)候執(zhí)行的代碼段
}

多選1執(zhí)行

第一個(gè)不成立,才會(huì)去執(zhí)行第二個(gè)。。。

4、switch多路判斷

switch(變量) {
    case 值1:
        當(dāng)變量 === 值1 的時(shí)候執(zhí)行的代碼段
    break
    case 值2:
        當(dāng)變量 === 值2 的時(shí)候執(zhí)行的代碼段
    break
    ....
    default:
        上面條件都不成立的時(shí)候執(zhí)行的代碼段
}

break可以省略,后續(xù)的case不判斷,直接執(zhí)行

default可以省略

多路判斷比多分支效率高,只判斷一次

多路判斷只能判斷 全等

5、三元運(yùn)算

能且僅能簡(jiǎn)化簡(jiǎn)單的雙分支

條件 ? 條件是true的時(shí)候執(zhí)行的代碼 : 條件是false的時(shí)候執(zhí)行的代碼

整個(gè)三元運(yùn)算表達(dá)式可以當(dāng)做是一個(gè)具體的數(shù)據(jù),進(jìn)行輸出、賦值

例:

num = num.length === 1 ? '0'+num : num
speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed)

三、循環(huán)結(jié)構(gòu)

學(xué)習(xí)目的:簡(jiǎn)化重復(fù)

1、while

while(條件) {
    條件是true的時(shí)候重復(fù)執(zhí)行的代碼段
}

2、do-while

do{
    代碼段 - 先執(zhí)行一次,然后判斷條件,后續(xù)是否執(zhí)行就看條件是否為true
}while(條件)

3、for

for(初始值定義語(yǔ)法; 條件; 變化) {
    條件為true的時(shí)候重復(fù)執(zhí)行的代碼段
}

重點(diǎn):循環(huán)執(zhí)行的過(guò)程

四、函數(shù)

理解:存儲(chǔ)一段代碼的容器

定義語(yǔ)法:

function 函數(shù)名(形參1, 形參2, ...) { // 形參就是變量名
    // 形參就相當(dāng)于在函數(shù)內(nèi)提前定義好的變量
    // 如果沒(méi)有實(shí)參給形參賦值 - 形參默認(rèn)是undefined
    // 形參可以直接給賦值 - 形參有默認(rèn)值 - 只能放在最后
    代碼段
    // 如果函數(shù)調(diào)用后需要得到一個(gè)結(jié)果 - 必須return 結(jié)果
    // return 可以阻止代碼向下執(zhí)行
}

函數(shù)名的規(guī)則:跟變量名的規(guī)則一樣

調(diào)用語(yǔ)法:

var 變量 = 函數(shù)名(實(shí)參1, 實(shí)參2, ...)

<font color="red">**預(yù)解析: **</font>

概念:代碼在執(zhí)行之前先進(jìn)行解析

過(guò)程:從當(dāng)前作用域找所有變量定義和函數(shù)定義,找到后將變量定義和函數(shù)定義的代碼提升到當(dāng)前作用域的最前面。代碼按照提升后的順序執(zhí)行。

注意事項(xiàng):

  1. 只提升定義,不提升賦值
  2. 當(dāng)變量名和函數(shù)名同名,保留函數(shù),忽略變量
  3. 預(yù)解析一定在執(zhí)行之前 - 不會(huì)執(zhí)行的代碼中如果有變量和函數(shù)的定義,也會(huì)預(yù)解析
  4. 全局有全局預(yù)解析,局部也有局部的預(yù)解析
  5. 局部如果有形參,先給形參賦值,再進(jìn)行預(yù)解析,且預(yù)解析的函數(shù)跟形參同名,函數(shù)會(huì)覆蓋掉形參的值
  6. 代碼報(bào)錯(cuò)以后的代碼就不再執(zhí)行了 - 如果代碼中有報(bào)錯(cuò),就無(wú)法阻止默認(rèn)行為了
  7. 連等特殊語(yǔ)法:var a = b = 9 相當(dāng)于:var a = 9 b = 9

函數(shù)的本質(zhì):就是一個(gè)特殊變量,存儲(chǔ)了一段代碼,可以通過(guò)變量名()執(zhí)行這段代碼

匿名函數(shù):將一個(gè)函數(shù)賦值給變量使用 - 這個(gè)變量的類型是function,值就是這一段代碼 - 原本函數(shù)中的名字就失效了 - 這樣沒(méi)有名字的函數(shù)就叫匿名函數(shù)

匿名函數(shù)作用:

  1. 將匿名函數(shù)賦值給變量使用

  2. 自調(diào)用

    (function(形參) {
        
    })(實(shí)參)
    

<font color="red">作用域</font>

概念:能起到作用的區(qū)域

分類:全局和局部

在全局中定義的變量叫全局變量 - 可以在任何地方使用

在局部中定義的變量叫局部變量 - 只能在局部中使用

重點(diǎn):全局不能訪問(wèn)局部變量,局部可以訪問(wèn)全局變量

作用域鏈:作用域會(huì)發(fā)生嵌套,這樣形成一條鏈?zhǔn)浇Y(jié)構(gòu)叫作用域鏈。

作用域鏈的規(guī)則:

  1. 將一個(gè)變量當(dāng)做具體數(shù)據(jù)使用(輸出、讓他去運(yùn)算)的時(shí)候,先在當(dāng)前作用域中找這個(gè)變量的定義,如果沒(méi)有,就去上級(jí)作用域中找,。。。直到全局,全局沒(méi)找到,報(bào)錯(cuò):XX is not defined
  2. 給一個(gè)變量賦值,先在當(dāng)前作用域中找變量的定義,如果沒(méi)有,就去上級(jí)作用域中找,。。。直到全局,全局沒(méi)找到,就在全局定義這個(gè)變量并賦值 - 省略var定義變量

遞歸函數(shù):

概念:在函數(shù)內(nèi)調(diào)用自己 - 形成循環(huán)

注意事項(xiàng):一定要添加停止的條件

事件:

給標(biāo)簽添加行為。

標(biāo)簽.on類型 = 一段函數(shù)代碼

一段函數(shù)代碼可以是匿名函數(shù),也可以用函數(shù)名表示。一定不是函數(shù)調(diào)用的語(yǔ)法。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容