第二章 類型、值和變量

第二章   類型、值和變量

          Javascript的數據類型分爲兩類:原始數據類型(數字、字符串、布爾值和兩個特殊的原始值:null和undefine)和對象類型(是屬性的集合,一種特殊的對象類型:函數)

2.1 數字

   (1)javascript不區分整數值和浮點數值,javascript中的所有數字均以浮點數值表示。能表示的整數範圍爲:-2的53次方到2的53次方,包含邊界值;注意:javascript中的實際操作值是32位整數;某些javascript十幾支持八進制直接量,而有些不支持,所以儘量不要使用;

(2)浮點型直接量:採用傳統的實數寫法,由整數部分,小數點和小數部分組成;

(3)javascript中的算術運算符

          加法運算符、減法運算符、乘法運算符、除法運算符、求餘運算符;還有通過Math對象屬性定義的函數和常量來實現的

(4)javascript預定義了全局變量Infinity和NaN。用來表示正無窮大和非數字值;

(5)javascript中的非數字值,它和任何值都不想等,包括自身;

(6)二進制浮點數和四捨五入錯誤:javascript採用IEEE=754浮點數表示法,這種二進制表示法,可以精確表示分數,二進制浮點數表示方法並不精確表示類似0.1這樣簡單的數字;

2.2 文本

(1)字符串是一組由16位值組成的不可變的有序序列,每個字符通常都表示來自於Unicode字符集;javascript通過字符串類型表示文本;

(2)字符串常量:有單引號或雙引號括起來的字符序列;當使用單引號來定界字符串時,需要格式外注意單引號和撇號,因爲都是同一個字符,所以使用反斜線來轉義所有的撇號。

(3)字符串的使用:javascript中字符串連接,使用的是“+”號;javascript中的字符串是固定不變的;

(4)模式匹配:javascript定義了RegExp()構造函數,用來創建表時文本匹配漠視的對象,這些模式稱爲這規則表達式;string和RegExp對象均定義了利用正則表達式進行模式匹配和查找與替換的函數。

2.3 布爾值:包含tostring()方法,因此可以使用這個方法將字符串轉換爲true或者false,但它幷包含其他有用的方法;

2.4 null和undefined

(1)null是javascript語言的關鍵字,表示一個特殊值,通常是空值;如果查詢對象屬性或數組元素的值返回一個undefined則說明這個屬性元素不存在。

(2)如果想將他們賦值給變量或者屬性,或將他們作爲參數傳入函數,最佳選擇使用null

2.5 全局對象

   (1)全局對象的屬性是全局定義的符號,javascript程序可以直接使用,當javascript解釋器啓動時,他將創建一個新的全局對象,並給他一組定義的初始屬性;

(2)全局變量的初始屬性並不是保留字,但他們應該當作保留字對待

(3 )在客戶端javascript中,window對象充當了全局對象,引用其自身,可以代替this來引用全局變量,window對象定義了全局屬性;

2.6 包裝對象

(1)javascript對象是一種複合值:他是屬性或已命名值得集合。通過“.”符號來引用值;

(2)存取字符串、數字和布爾值的屬性時創建的臨時對象稱爲包裝對象,他只是偶爾用來區分字符串值和字符串對象、數字和數值對象以及布爾值和布爾對象。

(3)javascript會在必要時將包裝對象轉換成原始值,“==”等於運算符將原始值和其包裝對象看作相等,但“===”全等運算符視爲不等(通過typeof運算符可以看到原來的原始值和其包裝對象不同);

2.7 不可變的原始值和可變的對象引用

(1)原始值是不可更改的:任何方法都無法更改一個原始值;原始值的比較是指的比較,只要它們的值相等,就是爲相等;

(2)對象和原始值的不同:對象的值是可變的,對象的比較時引用的比較,當且僅當他們引用同一個基對象時才相等;如果相比較兩個單獨的對象和數組,則必須比較他們的屬性和元素;

2.8 類型轉換

(1)原始值到對象的轉換可以通過調用string()、Number()或Boolean()構造函數,轉換爲他們各自的包裝對象;

(2)一個值轉換爲另一個值,並不意味着兩個值相等。

(3)顯示類型轉換:最簡單的方法就是使用Boolean()、Number()、String()和Object()函數;javascript中的隱式類型轉換,有時用於類型轉換;

(4)對象轉換爲原始值:所有的對象繼承了兩個轉換方法,一個是tistring(),另一個是valueof()

(5)javascript中首先嚐試使用valueof()方法,如果對象具有這個方法,返回一個原始值,則javascript將這個值轉換爲數字並返回,如果沒有這個方法就tostring()方法,將其轉換並返回,否則拋出一個類型錯誤異常;

(6)數組繼承了valueof()方法,返回的是對象,不是原始值,所以數組用tostring()方法;

(7)日期函數是javascript中唯一預先定義的類型,它定義了有意義的像字符串和數字類型的轉換。對非日期對象來說對象到原始值基本上是對對象到數字的轉換;通過walueof和tostring方法返回的原始值將被直接調用,而不被強制轉換爲數字或字符串;

2.9 變量聲明

(1)在javascript中使用一個變量需先聲明,在這裏使用關鍵字var聲明;如果聲明一個變量沒有付初始值,則這個變量就是undefined

(2)重複的聲明一個具有初始化的變量,就如同一個簡單的賦值語句,如果一個爲聲明變量賦值,javascript會給全局變量創建一個同名的屬性,並且他工作起來像一個正常的全局變量

2.10 變量作用域

(1)在函數體中,局部的變量優先級全局變量;

(2)花括號內的每一段代碼都具備各自的作用域,而且變量在聲明它代碼段之外是不可見的,稱爲塊級作用域;

(3)將函數體內部的變量聲明提前到函數整體的頂部,同時變量初始化留在原來的位置;

(4)作用域鏈:是一個對象列表或者鏈表,這組對象定義了這段代碼作用域中的

變量;當javascript查找變量x的值時,會從鏈表的第一個開始查,一直往下查,如果沒有,就拋出一個引用錯誤;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章