溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

javascript值和分號的用法

發(fā)布時間:2021-09-09 16:21:17 來源:億速云 閱讀:97 作者:chen 欄目:web開發(fā)

本篇內(nèi)容主要講解“javascript值和分號的用法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“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ù)調用。也可以理解為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)

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

到此,相信大家對“javascript值和分號的用法”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關內(nèi)容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

js
AI