欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

雖然通過(guò)引號(hào)可以用來(lái)區(qū)分變量和字符串,但值往往也可能是一個(gè)關(guān)鍵字,比如上面那段代碼我將x賦值為null,那么這些編程語(yǔ)言又是如何區(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賦值雖然沒(méi)有報(bào)錯(cuò),但也沒(méi)有成功。也許對(duì)于null和undefined來(lái)說(shuō),它們就是值。而變量則是尋找值。我們說(shuō)javascript是如何區(qū)分變量和關(guān)鍵字,最終或許就變成了javascript是如何區(qū)分變量和值的。

分號(hào)

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

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

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

我們知道一個(gè)分號(hào)代表了一段代碼的結(jié)束,但問(wèn)題是javascript允許你不寫分號(hào),這樣就出現(xiàn)了一個(gè)問(wèn)題,代碼的結(jié)束與否不是你來(lái)決定的而是由程序來(lái)決定的,而程序也不是萬(wàn)能的,往往它只是走的某個(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ì)無(wú)法解析下去,也可以這么說(shuō),如果遇到無(wú)法解析下去則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

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

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

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

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

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

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

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

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

test.js

var a
a

zmz.js

(1+2)

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

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

var a
a(1+2)

你說(shuō)這能不出錯(cuò)嗎,如果我們?cè)诓寮囊婚_始就加上分號(hào),這種事情就不可能出現(xiàn)。

var a
a;(1+2)

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

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

相關(guān)文章

  • 采用call方式實(shí)現(xiàn)js繼承

    采用call方式實(shí)現(xiàn)js繼承

    這篇文章主要介紹了如何采用call方式實(shí)現(xiàn)js繼承,需要的朋友可以參考下
    2014-05-05
  • setTimeout與setInterval的區(qū)別淺析

    setTimeout與setInterval的區(qū)別淺析

    這篇文章主要給大家介紹了關(guān)于setTimeout與setInterval區(qū)別的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用js具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • javascript加號(hào)"+"的二義性說(shuō)明

    javascript加號(hào)"+"的二義性說(shuō)明

    單個(gè)的加號(hào)作為運(yùn)算符在 JavaScript 中有三種作用。
    2013-03-03
  • BootStrap tooltip提示框使用小結(jié)

    BootStrap tooltip提示框使用小結(jié)

    這篇文章主要為大家詳細(xì)介紹了BootStrap tooltip提示框使用小結(jié) ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • js簡(jiǎn)單抽獎(jiǎng)代碼

    js簡(jiǎn)單抽獎(jiǎng)代碼

    年底了各個(gè)公司都有抽獎(jiǎng)活動(dòng),我也寫了一個(gè)超級(jí)簡(jiǎn)單的代碼來(lái)實(shí)現(xiàn)抽獎(jiǎng)效果,這里沒(méi)有華麗的Css3效果,但卻有短小精悍的js代碼。
    2015-01-01
  • 對(duì)layui初始化列表的CheckBox屬性詳解

    對(duì)layui初始化列表的CheckBox屬性詳解

    今天小編就為大家分享一篇對(duì)layui初始化列表的CheckBox屬性詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-09-09
  • javascript實(shí)現(xiàn)點(diǎn)擊星星小游戲

    javascript實(shí)現(xiàn)點(diǎn)擊星星小游戲

    這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)點(diǎn)擊星星小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • JS與C#編碼解碼

    JS與C#編碼解碼

    這篇文章主要是對(duì)JS與C#編碼解碼進(jìn)行了詳細(xì)的介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2013-12-12
  • JS操作JSON方法總結(jié)(推薦)

    JS操作JSON方法總結(jié)(推薦)

    JSON是一種輕量級(jí)的數(shù)據(jù)交換格式,采用完全獨(dú)立于語(yǔ)言的文本格式,是理想的數(shù)據(jù)交換格式。本文給大家介紹JS操作JSON方法總結(jié),非常不錯(cuò)具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧
    2016-06-06
  • JavaScript數(shù)組去重的五種方法

    JavaScript數(shù)組去重的五種方法

    javascript數(shù)組去重的方法有很多種,在網(wǎng)上到處都可以找到答案,下面小編給大家整理了一份關(guān)于同類型的數(shù)組去重復(fù)的方法,感興趣的朋友一起看看吧
    2015-11-11

最新評(píng)論