js是一種無類型弱檢測的語言,它對變量的定義并不需要聲明變量類型,我們隻要通過指派的形式就可以将各種類型的資料指派給同一個變量;而且js中的變量是松散類型的,可以存儲任何類型的資料;由于不存在定義某個變量必須要儲存何種資料類型值的規則,變量的值及其資料類型可以在腳本的生命周期内改變
變量命名方法與規則:
1.變量的命名方法
(1)匈牙利命名法:變量名=類型+對象描述,變量的類型有:int(整形)、float(浮點形)、boolean(布爾形)、string(字元串)、array(數組)、object(對象)、function(函數)、regular expression(正則)等
(2)駝峰命名法:駝峰命名法又分為兩種,一種是大駝峰,即變量名的每個單詞首字母都大寫,例如:thenumber;第二種是小駝峰,即變量名的第一個單詞首字母小寫其他首字母大寫,例如:thenumber
(3)橫線連接配接法:即變量名的單詞與單詞間用下劃線或者短橫線連接配接,例如:the-number或the_number
2.變量的命名規則:
(1)變量名可以包含字母、數字、下劃線和美元符号
(2)變量名首字母必須為英文字母(嚴格區分大小寫)、美元符号或者下劃線
(3).不允許使用js關鍵字和保留字做變量名
3.變量的聲明:
(1)變量的顯式聲明即用 ‘var 變量名’表示,不通過var的聲明為隐式聲明
(2)變量必須先聲明後讀寫,先指派後運算
(3)定義變量不用立即指派,可以同時聲明多個變量用逗号(,)隔開
(4)同一變量可以多次聲明,聲明的位置不同使用範圍等意義不同
4.變量的類型有哪幾種
(1)值類型:值類型包含數值、布爾值、字元串、null和undefined,值類型被構造後占用空間且占用空間固定,它被儲存在棧中,在後續操作中儲存與複制的都是其自身,可以使用typeof來檢測資料的類型,基本類型資料為值類型
(2)引用類型:使用new()方法構造出的對象是引用型的,它包含對象、數組和函數,引用類型被構造出後被儲存在堆中且占用空間不固定,它在操作的時候被儲存和複制的通常是記憶體位址或者指向該對象的指針,使用instanceof來檢測資料的類型
變量的作用域:
1.變量包含兩種:
(1)全局變量:包括在函數體外定義的變量和在函數體内定義的無var變量,可以在任何位置調用,在頂層代碼中我們使用this關鍵字和window對象都可以通路到它
(2)局部變量:包括在函數内部使用var聲明的變量和函數的參數變量,隻能在目前函數體内調用
2.不同變量的優先級:
局部變量高于參數變量高于全局變量
3.變量都有哪些特性:
(1)全局變量是全局對象的屬性,局部變量是調用對象的屬性
(2)内部函數可通路外層函數的局部變量,外層函數不能通路内層函數的局部變量
(3)全局變量除非被顯示删除,否則一直存在;局部變量自聲明起至函數運作完畢或被顯式銷毀;是以在程式設計中我們需要考慮如何合理聲明變量,這樣既減少不必要的記憶體開銷,同時也能很大程度地避免變量重複定義而覆寫先前定義的變量所造成的debug麻煩。
(4)另外還可以使用标記清零和引用計數等回收機制結束變量的生命周期
(5)js變量沒有塊級作用域
(6)當我們通路一個沒有聲明的變量時js會報錯,而當我們給一個沒有聲明的變量指派時js不會報錯,相反它會認為我們是要隐式申明一個全局變量
(7)用var關鍵字聲明的變量,未經初始化時儲存的是一個特殊的值—undefined,變量初始化僅僅是給變量賦一個值
(8)使用更具語義的變量名,讓代碼的可讀性更強
特殊數值常量:
infinity:無窮大的特殊值
nan:非數字值
number.max_value:可表示的最大數字
number.min_value:可表示的最小數字
number.nan:非數字值
number.positive_infinity:正無窮大
number.negative_infinity:負無窮大