天天看點

js中與變量相關的一些知識

1.變量的定義與聲明中常見問題:

(1)用var關鍵字聲明的變量,未經初始化時,儲存的是一個特殊的值—undefined,變量初始化僅僅是給變量賦一個值

(2)當使用var關鍵字聲明了一個變量時,建立的這個變量是不可配置的,也就是說這個變量無法通過delete運算符删除;在嚴格模式下,使用delete運算符删除var關鍵字聲明的變量會導緻syntaxerror。

(3)省略var關鍵字會導緻定義一個全局變量,但是不推薦這種做法。在嚴格模式下,給未聲明的變量指派會導緻referenceerror。

(4)變量的聲明、定義與初始化

a)聲明:給變量一個名字,宣告它從此刻開始存在;

b)定義:給變量配置設定一個存儲空間;

c)初始化:給變量的存儲空間指派。

由于js是一種動态語言,其變量的類型是不固定的,可以随着儲存值的變化而變化,是以其定義變得無關緊要

(5)變量聲明提升

js在執行的時候,會把所有變量的聲明都提升到目前作用域的最前面;聲明提升,這步操作是在js引擎“預編譯”階段實作的,是在代碼開始運作之前;

2.基本類型與引用類型

(1)對于基本類型值,在複制變量的時候,會在新的變量上建立一個新值,這個新值是原值的一個副本,它們互相獨立;基本類型值之間的比較,隻是單純的值的比較

(2)引用類型值是儲存在變量中的對象,儲存引用類型值的變量,實際上儲存的是一個指向該對象的指針;當複制儲存着對象的某個變量時,複制的其實是指針;複制操作結束後,兩個變量指向同一個對象

(3)對于引用類型值,可以為其添加屬性和方法,也可以修改或者删除其屬性和方法;在為對象添加屬性和方法時,操作的是實際的對象,是以,改變任何一個變量,都會影響另外一個變量。

(4)引用類型值的比較并非值的比較:即使兩個對象包含相同的屬性和值,它們也是不相等的;各個索引元素完全相等的兩個數組也不相等;引用類型值的比較是引用的比較,當且僅當它們引用同一個對象時,它們才相等

3.全局變量:當js解析器啟動時,或者任何web浏覽器加載新頁面的時候,它将建立一個新的全局對象,并給他一組定義的初始屬性:

(1)全局屬性:比如undefined、infinite、nan

(2)全局函數:比如isnan()、parseint()、eval()

(3)構造函數,比如date()、string()、array()、object()

(4)全局對象:比如math、json

初次建立的時候,全局對象定義了js中所有的預定義全局值;如果代碼聲明了一個全局變量,這個全局變量就是全局對象的一個屬性。

4.名字解析順序

js中一個名字可能以4種方式進入作用域,其優先級如下:

(1)語言内置:所有作用域中都有arguments對象和this對象;

(2)函數聲明

(3)形式參數

(4)變量聲明:不會影響同名的函數聲明或者形式參數聲明

繼續閱讀