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

走進javascript——不起眼的基礎,值和分號

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

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

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

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

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

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

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

分號

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

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

在代碼的最前面有一個分號,那么這個分號是干什么用的呢?

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

以下是javascript對省略分號的解析規(guī)則

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

javascript解析器會將以上代碼解析成

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

如果javascript不給2后面添加分號將會無法解析下去,也可以這么說,如果遇到無法解析下去則javascript解析器會嘗試給其添加一個分號,如果還是解析不了則報錯。又比如下面這一段代碼

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

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

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

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

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

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

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

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

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

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

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

test.js

var a
a

zmz.js

(1+2)

如果你運行起來會發(fā)現(xiàn)并沒有報錯,也就是說javascript解析器并不會因為前面這個文件沒有加分號而和后一個文件中的代碼一起解析。

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

var a
a(1+2)

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

var a
a;(1+2)

因此不要把分號單單認為只是用來結束某段代碼,它還可以用來隔離某段代碼和別人劃清界限。

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

相關文章

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

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

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

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

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

    javascript加號"+"的二義性說明

    單個的加號作為運算符在 JavaScript 中有三種作用。
    2013-03-03
  • BootStrap tooltip提示框使用小結

    BootStrap tooltip提示框使用小結

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

    js簡單抽獎代碼

    年底了各個公司都有抽獎活動,我也寫了一個超級簡單的代碼來實現(xiàn)抽獎效果,這里沒有華麗的Css3效果,但卻有短小精悍的js代碼。
    2015-01-01
  • 對layui初始化列表的CheckBox屬性詳解

    對layui初始化列表的CheckBox屬性詳解

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

    javascript實現(xiàn)點擊星星小游戲

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

    JS與C#編碼解碼

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

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

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

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

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

最新評論