整合營(yíng)銷(xiāo)服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢(xún)熱線(xiàn):

          JavaScript 變量

          量是用于存儲(chǔ)信息的"容器"。

          實(shí)例

          var x=5;

          var y=6;

          var z=x+y;


          就像代數(shù)那樣

          x=5

          y=6

          z=x+y

          在代數(shù)中,我們使用字母(比如 x)來(lái)保存值(比如 5)。

          通過(guò)上面的表達(dá)式 z=x+y,我們能夠計(jì)算出 z 的值為 11。

          在 JavaScript 中,這些字母被稱(chēng)為變量。


          JavaScript 變量

          與代數(shù)一樣,JavaScript 變量可用于存放值(比如 x=5)和表達(dá)式(比如 z=x+y)。

          變量可以使用短名稱(chēng)(比如 x 和 y),也可以使用描述性更好的名稱(chēng)(比如 age, sum, totalvolume)。

          • 變量必須以字母開(kāi)頭

          • 變量也能以 $ 和 _ 符號(hào)開(kāi)頭(不過(guò)我們不推薦這么做)

          • 變量名稱(chēng)對(duì)大小寫(xiě)敏感(y 和 Y 是不同的變量)


          JavaScript 數(shù)據(jù)類(lèi)型

          JavaScript 變量還能保存其他數(shù)據(jù)類(lèi)型,比如文本值 (name="Bill Gates")。

          在 JavaScript 中,類(lèi)似 "Bill Gates" 這樣一條文本被稱(chēng)為字符串。

          JavaScript 變量有很多種類(lèi)型,但是現(xiàn)在,我們只關(guān)注數(shù)字和字符串。

          當(dāng)您向變量分配文本值時(shí),應(yīng)該用雙引號(hào)或單引號(hào)包圍這個(gè)值。

          當(dāng)您向變量賦的值是數(shù)值時(shí),不要使用引號(hào)。如果您用引號(hào)包圍數(shù)值,該值會(huì)被作為文本來(lái)處理。

          實(shí)例

          var pi=3.14;

          var person="John Doe";

          var answer='Yes I am!';


          聲明(創(chuàng)建) JavaScript 變量

          在 JavaScript 中創(chuàng)建變量通常稱(chēng)為"聲明"變量。

          我們使用 var 關(guān)鍵詞來(lái)聲明變量:

          var carname;

          變量聲明之后,該變量是空的(它沒(méi)有值)。

          如需向變量賦值,請(qǐng)使用等號(hào):

          carname="Volvo";

          不過(guò),您也可以在聲明變量時(shí)對(duì)其賦值:

          var carname="Volvo";

          在下面的例子中,我們創(chuàng)建了名為 carname 的變量,并向其賦值 "Volvo",然后把它放入 id="demo" 的 HTML 段落中:

          實(shí)例

          <p id="demo"></p>

          var carname="Volvo";

          document.getElementById("demo").innerHTML=carname;

          嘗試一下 ?


          一條語(yǔ)句,多個(gè)變量

          您可以在一條語(yǔ)句中聲明很多變量。該語(yǔ)句以 var 開(kāi)頭,并使用逗號(hào)分隔變量即可:

          var lastname="Doe", age=30, job="carpenter";

          聲明也可橫跨多行:

          var lastname="Doe",

          age=30,

          job="carpenter";


          Value = undefined

          在計(jì)算機(jī)程序中,經(jīng)常會(huì)聲明無(wú)值的變量。未使用值來(lái)聲明的變量,其值實(shí)際上是 undefined。

          在執(zhí)行過(guò)以下語(yǔ)句后,變量 carname 的值將是 undefined:

          var carname;


          重新聲明 JavaScript 變量

          如果重新聲明 JavaScript 變量,該變量的值不會(huì)丟失:

          在以下兩條語(yǔ)句執(zhí)行后,變量 carname 的值依然是 "Volvo":

          var carname="Volvo";

          var carname;


          JavaScript 算數(shù)

          您可以通過(guò) JavaScript 變量來(lái)做算數(shù),使用的是 = 和 + 這類(lèi)運(yùn)算符:

          實(shí)例

          y=5;

          x=y+2;

          您可以把變量看做存儲(chǔ)數(shù)據(jù)的容器。

          JavaScript 語(yǔ)句和 JavaScript 變量都對(duì)大小寫(xiě)敏感。

          一個(gè)好的編程習(xí)慣是,在代碼開(kāi)始處,統(tǒng)一對(duì)需要的變量進(jìn)行聲明。

          復(fù)雜的網(wǎng)站都會(huì)有大量的CSS代碼,通常也會(huì)有許多重復(fù)的值。

          舉個(gè)例子,同樣一個(gè)顏色值可能在成千上百個(gè)地方被使用到,如果這個(gè)值發(fā)生了變化,需要全局搜索并且一個(gè)一個(gè)替換,效率不高且容易出錯(cuò)。

          自定義屬性在某個(gè)地方存儲(chǔ)一個(gè)值,然后在其他許多地方引用它。另一個(gè)好處是語(yǔ)義化的標(biāo)識(shí)。比如,--main-text-color 會(huì)比 #00ff00 更易理解,尤其是這個(gè)顏色值在其他上下文中也被使用到。

          概念

          自定義屬性(有時(shí)候也被稱(chēng)作CSS變量或者級(jí)聯(lián)變量)是由CSS作者定義的,它包含的值可以在整個(gè)文檔中重復(fù)使用。

          由自定義屬性標(biāo)記設(shè)定值(比如: --main-color: black;),由 var() 函數(shù)來(lái)獲取值(比如: color: **var(--main-color)**;)。

          優(yōu)勢(shì)

          在構(gòu)建大型站點(diǎn)時(shí),作者通常會(huì)面對(duì)可維護(hù)性的挑戰(zhàn)。在這些網(wǎng)頁(yè)中,所使用的CSS 的數(shù)量是非常龐大的,并且在許多場(chǎng)合大量的信息會(huì)重復(fù)使用。

          例如,在網(wǎng)頁(yè)中維護(hù)一個(gè)配色方案,意味著一些顏色在 CSS 文件中多次出現(xiàn),并被重復(fù)使用。當(dāng)你修改配色方案時(shí),不論是調(diào)整某個(gè)顏色或完全修改整個(gè)配色,都會(huì)成為一個(gè)復(fù)雜的問(wèn)題,不容出錯(cuò),而單純查找替換是遠(yuǎn)遠(yuǎn)不夠的。

          如果使用了CSS 框架,這種情況會(huì)變得尤其糟糕,此時(shí)如果要修改顏色,則需要對(duì)框架本身進(jìn)行修改。

          在這些場(chǎng)合使用 LESS 或 Sass 類(lèi)似的預(yù)處理器是非常有幫助的,但是這種通過(guò)添加額外步驟的方式,可能會(huì)增加系統(tǒng)的復(fù)雜性。

          CSS變量為我們帶來(lái)一些預(yù)處理器的便利,并且不需要額外的編譯。

          這些變量的第二個(gè)優(yōu)勢(shì)就是名稱(chēng)本身就包含了語(yǔ)義的信息。CSS 文件變得易讀和理解。main-text-color比文檔中的#00ff00更容易理解,特別是同樣的顏色出現(xiàn)在不同的文件中的時(shí)候。

          用法

          下面是 CSS 變量的使用方法和步驟。

          CSS 中聲明變量

          我們都知道,在 JS 中要使用一個(gè)變量前,必須聲明這個(gè)表變量。在 CSS 中也是一樣的道理。

          聲明一個(gè)自定義屬性,屬性名需要以?xún)蓚€(gè)減號(hào)(--)開(kāi)始,屬性值則可以是任何有效的CSS值。和其他屬性一樣,自定義屬性也是寫(xiě)在規(guī)則集之內(nèi)的,如下:

          body {
              --bg-color: #7F583F;
              --color: #F7EFD2;
          }

          上面代碼中,body選擇器里面聲明了兩個(gè)變量:--bg-color和--color。

          它們與color、font-size等正式屬性沒(méi)有什么不同,只是沒(méi)有默認(rèn)含義。所以 CSS 變量(CSS variable)又叫做**"CSS 自定義屬性"**(CSS custom properties)。

          規(guī)則集所指定的選擇器定義了自定義屬性的可見(jiàn)作用域。通常的最佳實(shí)踐是定義在根偽類(lèi) :root下,這樣就可以在HTML文檔的任何地方訪問(wèn)到它了:

          :root {
              --main-bg-color: #eee;
          }

          自定義屬性名是大小寫(xiě)敏感的,--my-color 和 --My-color 會(huì)被認(rèn)為是兩個(gè)不同的自定義屬性。

          CSS 中使用變量

          通過(guò)var()函數(shù)來(lái)讀取變量。語(yǔ)法如下:

          var(custom-property-name, value)
          • name (必需) 變量名(以?xún)蓷l破折號(hào)開(kāi)頭)。
          • value (可選) 表示變量的默認(rèn)值。如果該變量不存在,就會(huì)使用這個(gè)默認(rèn)值。

          變量名稱(chēng)必須以?xún)蓚€(gè)破折號(hào)(--)開(kāi)頭,且區(qū)分大小寫(xiě)!

          使用方法:

          element {
            background-color: var(--main-bg-color);
          }

          變量也可以使用在變量聲明中:

          :root {
            --primary-color: #eee;
            --primary-bg-color: var(--main-bg-color);
          }

          變量值只能用作屬性值,不能用作屬性名。

          JS 操作 CSS 變量

          在 JS 代碼中,我們可能需要讀取 CSS 變量的值,其方法如下:

          const root = document.querySelector(":root");
          // 設(shè)置 CSS 變量
          root.style.setProperty("--main-bg-color", "red");
          // 讀取 CSS 變量
          const computedStyle = getComputedStyle(root);
          const mainBgColor = computedStyle.getPropertyValue("--main-bg-color");
          console.log(mainBgColor);
          // 刪除 CSS 變量
          root.style.removeProperty("--main-bg-color");

          總結(jié)

          以上就是關(guān)于 CSS 變量的一些基本概念及使用方法,更多詳情待后續(xù)!

          靈活使用 CSS 變量,不僅可以提高生產(chǎn)力,也能夠提高代碼的可閱讀性和維護(hù)性。

          ~

          ~

          ~ 本文完

          學(xué)習(xí)有趣的知識(shí),結(jié)識(shí)有趣的朋友,塑造有趣的靈魂!

          大家好!我是〖編程三昧〗的作者 隱逸王,我的公眾號(hào)是『編程三昧』,歡迎關(guān)注,希望大家多多指教!

          知識(shí)與技能并重,內(nèi)力和外功兼修,理論和實(shí)踐兩手都要抓、兩手都要硬!

          文首發(fā)自「慕課網(wǎng)」,想了解更多IT干貨內(nèi)容,程序員圈內(nèi)熱聞,歡迎關(guān)注!

          作者|慕課網(wǎng)精英講師 然冬

          變量就是存放一些內(nèi)容容器

          對(duì)于初學(xué)者,理解變量是重要的一環(huán)。

          從分析變量這個(gè)名詞,可以知道他是一個(gè)可以改變的量,這里的量就是代表某一種

          在 JavaScript 中,變量就是一個(gè)用來(lái)存放值的容器,并且可以對(duì)容器中的值做修改。

          每個(gè)變量都有唯一的變量名,使用變量名來(lái)區(qū)分變量。

          1. 聲明變量

          在 JavaScript 中使用var關(guān)鍵字來(lái)聲明變量。

          var 存放數(shù)字用的變量 = 996;
          
          console.log(存放數(shù)字用的變量); // 輸出:996
          代碼塊123

          上述這段代碼就是申明了一個(gè)名為存放數(shù)字用的變量的變量,并且將它的值設(shè)為996

          使用 console.log,括號(hào)內(nèi)放置變量名,即可將變量的值輸出在控制臺(tái)。

          其中 // 后面的內(nèi)容為注釋,代碼執(zhí)行過(guò)程中會(huì)被忽略。

          雖然使用中文作為變量名在 chrome 瀏覽器下沒(méi)有報(bào)錯(cuò),但是還是不建議使用。

          常規(guī)場(chǎng)景中不會(huì)有使用中文名作為變量的情況

          所以上述例子中的變量名不可取。

          var number = 996;
          
          console.log(number); // 輸出:996
          代碼塊123

          存放數(shù)字用的變量修改成 number ,執(zhí)行結(jié)果是一樣的。

          2. 賦值

          給變量設(shè)置值的操作稱(chēng)為賦值操作。

          2.1 最簡(jiǎn)單的賦值操作

          var result = 0;
          
          console.log(result); // 輸出:0
          代碼塊123

          這是一個(gè)最簡(jiǎn)單的賦值操作,直接將值賦給變量。

          通常只有一個(gè)等號(hào)出現(xiàn)的情況下就存在賦值操作。

          2.2 將計(jì)算結(jié)果賦值給變量

          var result = 2 + 3;
          
          console.log(result); // 輸出:5
          代碼塊123

          這也是一個(gè)賦值操作,只不過(guò)等號(hào)右邊的 2 + 3 會(huì)被計(jì)算出結(jié)果(計(jì)算的方式和小學(xué)開(kāi)始學(xué)習(xí)的自然數(shù)學(xué)一樣),再賦給變量 result

          將上面這個(gè)例子做一個(gè)簡(jiǎn)單的改寫(xiě):

          2.3 讓變量也參與計(jì)算

          var number1 = 2;
          var number2 = 3;
          
          var result = number1 + number2; // 2 + 3
          
          console.log(result); // 輸出:5
          代碼塊123456

          原本 2 + 3 這部分也可以被變量所代替,參與計(jì)算的就是變量中的值。

          2.4 改變變量的值

          var string = '今天加班?';
          
          console.log(string); // 輸出:今天加班?
          
          string = '福報(bào)!';
          
          console.log(string); // 輸出:福報(bào)!
          代碼塊1234567

          注意:

          這里賦給變量的值和之前有點(diǎn)不一樣,是中文文字。

          當(dāng)需要用變量存放一些“字”的時(shí)候,就需要用單引號(hào)'或者雙引號(hào)"將需要存放的字包裹。

          通常單個(gè)字會(huì)稱(chēng)之為字符,多個(gè)字的時(shí)候稱(chēng)為字符串

          這里做個(gè)了解,具體的會(huì)在后續(xù)數(shù)據(jù)類(lèi)型章節(jié)詳細(xì)展開(kāi)討論。

          這段代碼運(yùn)行后可以在控制臺(tái)觀察到有兩個(gè)輸出,分別對(duì)應(yīng)變量的值。

          代碼很簡(jiǎn)單,先聲明了一個(gè)叫 string 的變量,并賦值字符串今天加班?并輸出,隨后修改了他的值,重新賦值了字符串福報(bào)!

          這是變量最重要的一個(gè)特性:可變

          3. 變量的命名規(guī)范

          在 JavaScript 中變量名存在一定規(guī)范,所有變量名必須符合這些規(guī)范,否則程序無(wú)法執(zhí)行。

          3.1 變量名必須使用字母、下劃線(xiàn)(_)、美元符號(hào)($)開(kāi)頭

          盡管之前的例子有用到中文作為變量名,但是是不推薦的。

          // 不會(huì)報(bào)錯(cuò)但是不推薦
          var 數(shù)字 = 1;
          // 錯(cuò)誤
          var 1number = 1;
          // 錯(cuò)誤
          var number@a = 1;
          // 錯(cuò)誤
          var num+aa = 2;
          
          //下面是正確的方式
          var number1 = 1;
          var _number = 1;
          var $number = 1;
          代碼塊12345678910111213

          以上是一些簡(jiǎn)單的示例,可以根據(jù)規(guī)則自己在控制臺(tái)嘗試尋找規(guī)則。

          3.2 變量對(duì)大小寫(xiě)敏感

          // 這是兩個(gè)不同的變量
          var firstName = 'Hello';
          var firstname = 'hello';
          代碼塊123

          以上是兩個(gè)不同的變量,在 JavaScript 中變量是對(duì)大小寫(xiě)敏感的。

          兩個(gè)變量名即便字母是相同的,但是大小寫(xiě)不同,就不能算做一個(gè)變量。

          3.3 無(wú)法使用關(guān)鍵字作為變量名

          關(guān)鍵字就是指一些已經(jīng)被 JavaScript 預(yù)定義或者保留下來(lái)的內(nèi)容,如聲明變量用的關(guān)鍵字 var 就不能作為變量名。

          var var = 1; // Uncaught SyntaxError: Unexpected token 'var'
          代碼塊1

          上面這段代碼嘗試著將 var 作為變量,到控制臺(tái)運(yùn)行是會(huì)報(bào)錯(cuò)的。

          4. 合理規(guī)范的變量名

          剛開(kāi)始學(xué)習(xí)的讀者,現(xiàn)在去深究如何命名一個(gè)變量還有些尚早,因?yàn)榻Y(jié)合了具體的需求場(chǎng)景才能體會(huì)到一個(gè)好的變量名的重要性。可以先在此做個(gè)了解。

          對(duì)于變量名,除了上面提到的變量命名的規(guī)范,最需要注意的就是給變量起一個(gè)有意義的名字。

          如求和:

          var num1 = 1;
          var num2 = 2;
          var num3 = 3;
          var num4 = 4;
          
          var count = num1 + num2 + num3 + num4;
          代碼塊123456

          其中numnumber的縮寫(xiě),是很常用的一種縮寫(xiě)。

          count則是總數(shù),表示求和的結(jié)果。

          如果將上述例子做如下修改:

          var a = 1;
          var b = 2;
          var c = 3;
          var d = 4;
          
          var e = a + b + c + d;
          代碼塊123456

          缺少了有意義的變量名就比較難看出代碼具體在做什么。當(dāng)然這段代碼本身意義就不大,場(chǎng)景太過(guò)簡(jiǎn)單。

          剛才提到的縮寫(xiě),其實(shí)也是要注意的一點(diǎn),縮寫(xiě)上一定要使用通用的縮寫(xiě),如含有fn表示一個(gè)功能或者函數(shù),avg 表示平均值,pwd 表示密碼,i18n 為國(guó)際化。

          這些縮寫(xiě)比較通用,大部分開(kāi)發(fā)者都可以看得懂。隨著編碼經(jīng)驗(yàn)的增加,會(huì)在他人代碼里見(jiàn)到大量的縮寫(xiě),從而累積到自己的大腦的縮寫(xiě)庫(kù)中。

          最后需要注意的一點(diǎn)是業(yè)務(wù)中盡量不要含有中文拼音或中文拼音的縮寫(xiě),排開(kāi)鄙視鏈的原因,最大的問(wèn)題是會(huì)讓變量名變得冗長(zhǎng)難懂。

          以上內(nèi)容在寫(xiě) demo 或者測(cè)試功能的時(shí)候可以不需要考慮,寫(xiě) demo 等大部分情況是為了驗(yàn)證自己的猜想。

          // 不合理的變量名
          var ln = 'World'; // last name
          var zs = 0; // 總數(shù)
          var jinNianDeNianShouRu = 1999999999; // 今年的年收入
          代碼塊1234

          以上是針對(duì)變量名的意義展開(kāi)的討論。

          還有需要注意的是變量命名的格式,大部分前端程序員會(huì)使用駝峰命名法,也就是第一個(gè)字母小寫(xiě),后續(xù)如果有新的單詞來(lái)進(jìn)行構(gòu)成,單詞的第一個(gè)字符都大寫(xiě)。

          如:

          var firstName = 'Hello';
          
          var lastName = 'world';
          
          var createAt = 1577895179196;
          
          var userInfo = '用戶(hù)信息'; // Info => Information
          
          var isPaidUser = '是否付費(fèi)用戶(hù)';
          代碼塊123456789

          可以見(jiàn)到上面的變量,從構(gòu)成變量名的第二個(gè)單詞開(kāi)始,首字母都是大寫(xiě),這就是駝峰命名的格式,本 Wiki 所有變量名使用的就是這種格式。

          當(dāng)然還有大駝峰,就是第一個(gè)字母也大寫(xiě)。

          除此之外最常用的還有使用下劃線(xiàn)分隔變量,如 user_info,還有按功能來(lái)劃分的變量名,如使用匈牙利命名法,這里不再做展開(kāi)。

          5. 有關(guān)變量的其他知識(shí)

          5.1 變量的默認(rèn)值

          變量在聲明的時(shí)候,如果沒(méi)有賦值,則變量就會(huì)有一個(gè)默認(rèn)值 undefined

          var total;
          
          console.log(total); // 輸出:undefined
          代碼塊123

          undefined 是一種是數(shù)據(jù)類(lèi)型,具體內(nèi)容可以參考數(shù)據(jù)類(lèi)型章節(jié)。

          5.2 同時(shí)聲明多個(gè)變量

          使用一個(gè) var 關(guān)鍵字就可以直接聲明多個(gè)變量。

          var num1 = 0, num2 = 1;
          
          // 通常會(huì)換行,方便閱讀代碼
          var num3 = 2,
              num4 = 3,
              num5 = 4,
              num6,
              num7 = 6;
          代碼塊12345678

          在一個(gè)變量聲明后,使用逗號(hào)分隔,緊接著聲明下一個(gè)變量即可。

          通常使用一個(gè) var 聲明多個(gè)變量的時(shí)候也會(huì)換行,方便后續(xù)閱讀,并保持代碼格式上的整潔清晰,防止一行過(guò)長(zhǎng)。

          5.3 變量在 window 上

          在最外層聲明的變量(不包括 ES6 模塊的情況),實(shí)際上是變成了 window 對(duì)象的一個(gè)屬性。

          var number = 996;
          
          console.log(number); // 輸出:996
          console.log(window.number); // 輸出:996
          代碼塊1234

          上述代碼執(zhí)行后輸出的兩個(gè)內(nèi)容是一樣的,都為 996。有關(guān) window 對(duì)象的內(nèi)容可以參考 BOM 章節(jié)。

          細(xì)心的讀者應(yīng)該會(huì)注意到最外層這個(gè)條件,因?yàn)樽兞窟€有可能聲明在函數(shù)之中,函數(shù)有自己獨(dú)立的作用域,通常在函數(shù)中使用 var 關(guān)鍵字聲明的變量,只在函數(shù)中有效。

          至于為什么可以省略 window 直接訪問(wèn)到變量,可以參考作用域鏈章節(jié)。

          5.4 不使用 var 關(guān)鍵字聲明的變量

          假如不使用 var 關(guān)鍵字,直接創(chuàng)建變量并賦值:

          total = 10;
          
          console.log(total); // 輸出:10
          代碼塊123

          在控制臺(tái)運(yùn)行后會(huì)發(fā)現(xiàn)其實(shí)并沒(méi)有報(bào)錯(cuò),輸出的結(jié)果也正常。

          在非ES6模塊中,這樣創(chuàng)建的變量和使用 var 創(chuàng)建的變量除了不能提前使用之外,沒(méi)有其他大的區(qū)別,會(huì)被直接作為 window 對(duì)象的屬性,成為全局變量。

          即便是在函數(shù)或者其他存在塊級(jí)作用域的環(huán)境中,這樣聲明的變量也會(huì)作為全局變量。

          5.5 連續(xù)賦值

          var a = b = 1;
          代碼塊1

          假如把上面這行代碼拆開(kāi)來(lái)可以理解成是這樣的:

          b = 1;
          var a = b;
          代碼塊12

          看似沒(méi)什么問(wèn)題,許多開(kāi)發(fā)者也會(huì)用這種方式同時(shí)聲明多個(gè)變量,但如果在函數(shù)或者獨(dú)立的作用域中,b 就會(huì)成為全局變量,造成全局命名空間的污染。

          5.6 重復(fù)聲明變量

          按照之前說(shuō)的,變量在聲明的時(shí)候如果沒(méi)有賦值,則會(huì)是 undefined,這個(gè)規(guī)則在重復(fù)聲明的情況下不適用。

          var num = 1;
          var num;
          
          console.log(num); // 輸出:1
          代碼塊1234

          觀察上面這個(gè)例子輸出的結(jié)果,可以發(fā)現(xiàn)變量 num 的值并沒(méi)有改變。

          但是如果重新聲明的同時(shí)做賦值操作,值就會(huì)改變。

          var num = 1;
          var num = 3;
          
          console.log(num); // 輸出:3
          代碼塊1234

          這個(gè)例子輸出的結(jié)果,就是再次聲明并賦值后的值。

          5.7 提前使用變量

          console.log(number); // 輸出:undefined
          
          var number = 1;
          代碼塊123

          這個(gè)例子先輸出了 number 的值,再聲明并對(duì)其進(jìn)行賦值。

          代碼并沒(méi)有報(bào)錯(cuò),但如果沒(méi)有第二行聲明,只輸出 number

          console.log(number); // Uncaught ReferenceError: number is not defined
          代碼塊1

          這樣子會(huì)爆出變量未定義的錯(cuò)誤,說(shuō)明變量是可以被提前使用,只是沒(méi)有值,或者說(shuō)是 undefined 默認(rèn)值。

          具體原因可以參考執(zhí)行上下文章節(jié)。

          這里簡(jiǎn)單的解釋可以理解成,在瀏覽器執(zhí)行的時(shí)候,會(huì)把代碼調(diào)整成如下樣子:

          var number;
          
          console.log(number); // 這個(gè)時(shí)候 number 還沒(méi)有被賦值,所以輸出 undefined
          
          number = 1;
          代碼塊12345

          5.8 常量

          常量就是定義并賦值后再也不能修改的量,通常一些不會(huì)改變的量,如配置、物理值等會(huì)聲明為常量,在 ES6 之前是沒(méi)有提供常量這一特性的。

          但是根據(jù)常量自身的特性,定義賦值后不能被修改,就可以通過(guò)一些方式來(lái)模擬常量。

          第一種就是采用約定的形式,通常常量都是大寫(xiě),不同單詞之間用下劃線(xiàn)分隔。

          var PI = 3.1415926535;
          
          var DB_ACCOUNT = 'root';
          var DB_PASSWORD = 'root';
          代碼塊1234

          這種方式定義的常量本質(zhì)上還是變量,值還是可以修改的,但因?yàn)槊袷讲捎?span style="color: #4C76C9; --tt-darkmode-color: #4C76C9;">國(guó)際慣例,一眼就能看出是常量,不會(huì)對(duì)其修改。

          這種方式是最簡(jiǎn)單的方式,但不安全。

          第二種方式就是利用對(duì)象下屬性的描述來(lái)控制可寫(xiě)性,將對(duì)象的屬性設(shè)置為只讀。

          var CONFIG = {};
          
          Object.defineProperty(CONFIG, 'DB_ACCOUNT', {
            value: 'root',
            writable: false,
          });
          
          console.log(CONFIG.DB_ACCOUNT); // 輸出:root
          
          CONFIG.DB_ACCOUNT = 'guest';
          
          console.log(CONFIG.DB_ACCOUNT); // 因?yàn)椴豢杀桓膶?xiě),所以輸出:root
          代碼塊123456789101112

          這種方式將常量都放在一個(gè)對(duì)象下,通過(guò)Object.defineProperty定義屬性,設(shè)定其writablefalse,就可以防止被改寫(xiě)。

          但有一個(gè)問(wèn)題,CONFIG自身這個(gè)對(duì)象可能被修改。

          換一個(gè)思路,既然在最外層聲明的變量是放在window上的,那可以用這個(gè)方式往 window上掛不可改寫(xiě)的屬性。

          Object.defineProperty(window, 'DB_ACCOUNT', {
            value: 'root',
            writable: false,
          });
          
          console.log(DB_ACCOUNT); // 輸出:root
          
          DB_ACCOUNT = 'guest';
          
          console.log(DB_ACCOUNT); // 因?yàn)椴豢杀桓膶?xiě),所以輸出:root
          代碼塊12345678910

          通常情況下 window 對(duì)象是不可被修改的,這樣常量的安全系數(shù)就變得非常高,但缺點(diǎn)是可能性較差,通過(guò)一點(diǎn)修改可以提升可讀性。

          var define = function(name, value) {
            Object.defineProperty(window, name, {
              value: value,
              writable: false,
            });
          };
          
          define('DB_ACCOUNT', 'root');
          define('DB_PASSWORD', 'root');
          代碼塊123456789

          只要約定好使用 define 函數(shù)定義的都為常量即可。

          還有兩種方式,就是結(jié)合Object.sealObject.freeze的特性來(lái)聲明常量。

          前者可以使對(duì)象不能再被擴(kuò)充,但是所有屬性還需要再手動(dòng)設(shè)置不可寫(xiě),后者可以讓對(duì)象不能擴(kuò)充,屬性也不能修改。

          這里對(duì)這兩個(gè)原生方法不再做過(guò)多描述,有興趣可以查閱相關(guān) API 資料。

          6. 小結(jié)

          變量就是存放值的容器。

          變量名存在一些命名規(guī)則:

          • 變量名必須使用字母下劃線(xiàn)(_)美元符號(hào)($)開(kāi)頭;
          • 變量對(duì)大小寫(xiě)敏感;
          • 無(wú)法使用關(guān)鍵字作為變量名。

          同時(shí)起變量名的時(shí)候需要有意義,靠近上下文場(chǎng)景。

          歡迎關(guān)注「慕課網(wǎng)」,發(fā)現(xiàn)更多IT圈優(yōu)質(zhì)內(nèi)容,分享干貨知識(shí),幫助你成為更好的程序員!


          主站蜘蛛池模板: 色噜噜狠狠一区二区| 在线观看日本亚洲一区| 国产亚洲情侣一区二区无码AV| 亚洲一区精彩视频| 日本精品3d动漫一区二区| 亚洲av鲁丝一区二区三区| 亚洲av无码一区二区三区乱子伦| 国产伦精品一区二区三区女| 久久国产一区二区三区| 久久久精品人妻一区二区三区四| 精品视频一区二区三区四区| 国产日韩精品视频一区二区三区 | 亚洲色无码一区二区三区| 亚洲国产高清在线精品一区| 理论亚洲区美一区二区三区| 国产在线精品观看一区| 亚洲欧洲∨国产一区二区三区| 久久久av波多野一区二区| 日本免费一区二区三区最新| 中文字幕一区日韩在线视频| 无码日韩精品一区二区三区免费| 亚洲AV无码一区二区二三区软件| 亚洲av无码一区二区三区不卡 | 无码人妻精品一区二区蜜桃AV| 精品乱子伦一区二区三区| 国产一区二区三区乱码| 国产免费播放一区二区| 久久久综合亚洲色一区二区三区| 中文字幕一区二区视频| 男人的天堂亚洲一区二区三区| 中文字幕乱码亚洲精品一区| 精品一区二区三区无码视频| 精品久久一区二区三区| 无码av人妻一区二区三区四区| 日本人的色道www免费一区| 久久无码人妻一区二区三区午夜 | 国产精品无码一区二区在线 | 亚洲av高清在线观看一区二区 | 无码精品一区二区三区| 国精品无码一区二区三区左线 | 久久久无码一区二区三区|