最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

走進(jìn)javascript——不起眼的基礎(chǔ),值和分號(hào)

 更新時(shí)間:2017年02月24日 16:24:51   作者:追夢子  
本文主要介紹了javascript的基礎(chǔ)知識(shí)--值和分號(hào),具有很好的參考價(jià)值,下面跟著小編一起來看下吧

有時(shí)我很想知道javascript解析引擎是如何區(qū)分一個(gè)變量的值,比如下面這段代碼。

var x = 'javascript'; //javascript
x = "hello"; // hello
x = 555; //555
x = null; //null
x = a; //a is not defined
x = true; //true

對(duì)于數(shù)字是直接賦值的,因?yàn)樗鼪]有多樣性,數(shù)字就是數(shù)字。但是對(duì)于值是英文的情況就很難區(qū)分了,因?yàn)樵诰幊陶Z言中,英文既可能是字符串,也可能是引用的另外一個(gè)變量。因此如何區(qū)分變量和字符串就顯得格外重要,編程語言常常將字符串用引號(hào)括起來,從而達(dá)到區(qū)分變量和字符串的作用。有些語言比如java,它們還區(qū)分單引號(hào)和雙引號(hào),單引號(hào)括起來的是一個(gè)字符,而雙引號(hào)括起來的才是字符串。但javascript并不區(qū)分字符和字符串,而是把它們都當(dāng)作字符串,因此在javascript中單引號(hào)和雙引號(hào)并沒有什么區(qū)別。

雖然通過引號(hào)可以用來區(qū)分變量和字符串,但值往往也可能是一個(gè)關(guān)鍵字,比如上面那段代碼我將x賦值為null,那么這些編程語言又是如何區(qū)分變量和關(guān)鍵字的呢?

null = 123;
console.log(null); //Uncaught ReferenceError: Invalid left-hand side in assignment
undefined = 456;
console.log(undefined); //undefined

以上我給null和undefined分別賦給了另外一個(gè)值,其結(jié)果,給null賦值報(bào)錯(cuò)了,給undefined賦值雖然沒有報(bào)錯(cuò),但也沒有成功。也許對(duì)于null和undefined來說,它們就是值。而變量則是尋找值。我們說javascript是如何區(qū)分變量和關(guān)鍵字,最終或許就變成了javascript是如何區(qū)分變量和值的。

分號(hào)

在一些JS插件中,經(jīng)常會(huì)看到類似下面這樣的一行代碼

;(function(){
 .........
})();

在代碼的最前面有一個(gè)分號(hào),那么這個(gè)分號(hào)是干什么用的呢?

我們知道一個(gè)分號(hào)代表了一段代碼的結(jié)束,但問題是javascript允許你不寫分號(hào),這樣就出現(xiàn)了一個(gè)問題,代碼的結(jié)束與否不是你來決定的而是由程序來決定的,而程序也不是萬能的,往往它只是走的某個(gè)規(guī)則,而如果你寫的這段代碼和它的規(guī)則不符,最終的結(jié)果就有些不如人意了。

以下是javascript對(duì)省略分號(hào)的解析規(guī)則

var a
=
1 + 2
console.log(a) //3

javascript解析器會(huì)將以上代碼解析成

var a = 1 + 2;
console.log(a); //3

如果javascript不給2后面添加分號(hào)將會(huì)無法解析下去,也可以這么說,如果遇到無法解析下去則javascript解析器會(huì)嘗試給其添加一個(gè)分號(hào),如果還是解析不了則報(bào)錯(cuò)。又比如下面這一段代碼

var a = 10;
var b = 5;
var c = a + b
(a + b).toString()
// b is not a function

它說b不是一個(gè)函數(shù),也就是說以上這段代碼很有可能解析成了下面這段代碼

var a = 10;
var b = 5;
var c = a + b(a + b).toString();

它把()當(dāng)成了函數(shù)調(diào)用。也可以理解為javascript解析器會(huì)盡可能多的去匹配,但也有幾個(gè)例外,它們是retrun、break、continue,當(dāng)javascript解析器解析到這幾個(gè)關(guān)鍵字時(shí),它不會(huì)把換行后的內(nèi)容當(dāng)成是自身的,而是直接在換行之前添加分號(hào),不妨看看下面這段代碼

function test(){
 return 
 123;
}
console.log(test()); //undefined

它并沒有返回123,也就是說它直接在retrun后面加了分號(hào)。

再回過頭來看看,那些插件開發(fā)者為什么要在代碼第一行添加一個(gè)分號(hào)?

既然是插件,自然是給別人用的對(duì)吧,可關(guān)鍵問題是你也不清楚使用這個(gè)插件的人它的代碼是如何編寫的,這好像挺謬論的,它的代碼和我們有什么關(guān)系呢。

如果說使用者的代碼會(huì)影響我們的代碼,那么它又是如何影響的呢?比如我們正在編寫類似下面這樣的一段代碼

<script src="test.js"></script>
<script src="zmz.js"></script>

第一個(gè)腳本是使用者自己寫的,第二個(gè)腳本是引入的某個(gè)插件,那么瀏覽器又是如何解析這兩個(gè)腳本的呢?不妨我們來測試一下

test.js

var a
a

zmz.js

(1+2)

如果你運(yùn)行起來會(huì)發(fā)現(xiàn)并沒有報(bào)錯(cuò),也就是說javascript解析器并不會(huì)因?yàn)榍懊孢@個(gè)文件沒有加分號(hào)而和后一個(gè)文件中的代碼一起解析。

問題倒不在這,而是有可能你剛剛看了一本關(guān)于HTTP的書,哇靠,原來把文件合并可以減少請(qǐng)求數(shù),于是乎這兩個(gè)腳本融為一體了。搖身一變成了下面這樣

var a
a(1+2)

你說這能不出錯(cuò)嗎,如果我們在插件的一開始就加上分號(hào),這種事情就不可能出現(xiàn)。

var a
a;(1+2)

因此不要把分號(hào)單單認(rèn)為只是用來結(jié)束某段代碼,它還可以用來隔離某段代碼和別人劃清界限。

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!

相關(guān)文章

  • JS執(zhí)行刪除前的判斷代碼

    JS執(zhí)行刪除前的判斷代碼

    這篇文章主要介紹了JS執(zhí)行刪除前如何實(shí)現(xiàn)判斷,需要的朋友可以參考下
    2014-02-02
  • 原生JS實(shí)現(xiàn)HTML轉(zhuǎn)Markdown功能

    原生JS實(shí)現(xiàn)HTML轉(zhuǎn)Markdown功能

    這篇文章主要為大家詳細(xì)介紹了如何使用原生JS實(shí)現(xiàn)簡單的HTML轉(zhuǎn)Markdown功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-04-04
  • JavaScript實(shí)現(xiàn)圖像壓縮的方法

    JavaScript實(shí)現(xiàn)圖像壓縮的方法

    使用 JavaScript 和 canvas 壓縮圖像可以使用 canvas 的 drawImage() 方法將圖像繪制到 canvas 上,然后使用 toDataURL() 方法將圖像轉(zhuǎn)換為 Data URL 形式,這篇文章主要介紹了JavaScript 圖像壓縮的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • javascript鼠標(biāo)滑過顯示二級(jí)菜單特效

    javascript鼠標(biāo)滑過顯示二級(jí)菜單特效

    這篇文章主要為大家詳細(xì)介紹了javascript鼠標(biāo)滑過顯示二級(jí)菜單特效,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-07-07
  • JavaScript 更嚴(yán)格的相等 [譯]

    JavaScript 更嚴(yán)格的相等 [譯]

    大部分JavaScript程序員都知道:應(yīng)該使用嚴(yán)格相等(===)來代替“普通”的相等操作(==).但是,有時(shí)候你的確需要一個(gè)比嚴(yán)格相等===更嚴(yán)格的運(yùn)算符,比如說:在你想檢查某個(gè)值是否是NaN的時(shí)候,又或者你想?yún)^(qū)分-0和+0的時(shí)候.本文解釋了相關(guān)的知識(shí)以及ECMAScript.next中的解決辦法:“is”操作符
    2012-09-09
  • 微信小程序wx:for 的使用及wx:key綁定兩種方式

    微信小程序wx:for 的使用及wx:key綁定兩種方式

    wx:for是微信小程序中的一個(gè)列表渲染指令,用于循環(huán)渲染一個(gè)數(shù)組或?qū)ο笾械臄?shù)據(jù),它類似于JavaScript中的for循環(huán),可以根據(jù)數(shù)據(jù)的長度自動(dòng)渲染相應(yīng)的列表項(xiàng),本文給大家介紹微信小程序wx:for 的使用及wx:key綁定兩種方式,感興趣的朋友一起看看吧
    2023-12-12
  • js中onclick和addEventListener的區(qū)別

    js中onclick和addEventListener的區(qū)別

    本文對(duì)javascript中onclick事件處理的方法和addEventListener監(jiān)聽器進(jìn)行講解,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-08-08
  • JS實(shí)現(xiàn)DIV容器賦值的方法

    JS實(shí)現(xiàn)DIV容器賦值的方法

    這篇文章主要介紹了JS實(shí)現(xiàn)DIV容器賦值的方法,可結(jié)合ajax使用,涉及JavaScript針對(duì)頁面元素的動(dòng)態(tài)操作技巧,需要的朋友可以參考下
    2015-12-12
  • JavaScript數(shù)據(jù)結(jié)構(gòu)yocto queue隊(duì)列鏈表代碼分析

    JavaScript數(shù)據(jù)結(jié)構(gòu)yocto queue隊(duì)列鏈表代碼分析

    這篇文章主要為大家介紹了JavaScript數(shù)據(jù)結(jié)構(gòu)yocto queue隊(duì)列鏈表代碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • bootstrap手風(fēng)琴折疊示例代碼分享

    bootstrap手風(fēng)琴折疊示例代碼分享

    這篇文章主要為大家詳細(xì)介紹了bootstrap手風(fēng)琴折疊示例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05

最新評(píng)論

永昌县| 白河县| 河北区| 武平县| 梅河口市| 清涧县| 丰台区| 正安县| 鄱阳县| 浙江省| 大兴区| 高州市| 江油市| 新巴尔虎左旗| 侯马市| 贞丰县| 唐河县| 民县| 庆云县| 南陵县| 昭通市| 晋江市| 延长县| 仙居县| 万山特区| 连江县| 勐海县| 义乌市| 广安市| 峨山| 龙川县| 灵璧县| 南澳县| 萝北县| 许昌县| 依兰县| 永新县| 宜昌市| 和平县| 桦川县| 镇赉县|