Javascript權威指南看書筆記
第一章 詞法結構
javascript區分大小寫,而html不區分大小寫
unicode逸出序列是由/u為首碼加4位16進位數組成
標識符必須以字母,底線 _,美元符 $,開始
分號:javascript中語句獨佔一行,通常可以省略語句之間的分號。
例外: 1. return,break,continue,後緊跟換行,javascript會在換行處補填分號。 2. 雙目運算子++,--,若想作為運算式尾碼的話必須與運算式同一行。
第二章 類型,值和變數
javascript支援十進位和十六進位,因ECMAscript標準不支援八進位直接量,因此最好不要用以0為首碼的直接量
Math對象的屬性:
math.round(.6) //=>1.0 四捨五入 math.ceil(.6) //=>1.0 向上去整 math.floor(.6) //=>0.0 向下去整
算數運算中的特例 溢出(overflow):數字運算結果超過了javascript所能表示的上限
正數返回Infinity,負數返回-Infinity 下溢(underflow):結果比javascript所能表示的最小數小,返回0,
負數下溢會返回特殊的值’-0’
被0整出返回Infinity或-Infinity,例外,0/0返回NaN
NaN:和任何值都不相等,包括自身
判斷isNaN()函數
x!=x; //僅當x為NaN,為true
0和-0值除了作為除數外兩個值是相等的
二進位浮點數並不能精確表示類似於0.1的簡單數字
(.2-.1)==(.3-.2); //=>>false
字串直接量:用單引號來界定字串時,需格外小心英文中的所有個和縮寫,需用(/)轉義
Javascript和HTML帶嗎使用各自獨立的引號風格
Javascript運算式使用單引號表示字串
HTML事件處理屬性時用雙引號表示字串
屬性:
s.replace(“h”,”H”); //”hello”=>”Hello” s.toUpperCase( ); //”hello”=>”HELLO”
字串還可以當作唯讀數組,通過方括弧訪問
布爾值:javascript的任意值都可以轉化為布爾值
False:undefined ; null ; 0 ; -0 ; NaN ;‘ ‘True: 所有其他值,包括所有對象,數組
Null是javascript的關鍵字,undefined是預定義的全域變數,“==”認為兩者是相等的
封裝對象
var s=”test”; S.len=4; Var t=s.len; //undefined
在讀取字串,數字和布爾值的屬性(或方法)時,表現得像對象一樣。但試圖給其屬性賦值,則會忽略該操作:修改只發生在臨時對象上,而臨時對象並未繼續保留下來
原始值是不可改變的。(undefined,null,布爾值,數字,字串)
對象的值可通過對象屬性來更改(數組,函數) 兩個對象包含相同的屬性和值也不相等
Number()和parseFloat()區別
Number():只能用於十進位數轉換,並且不能出現非法尾隨字元
parseInt():會跳過任意數量的前置空格,並忽略後面的內容,第一個非空白字元是非法的數字直接量則返回NaN
所有的對象轉換為布爾值都是true
儘管全域範圍編寫代碼時可以不寫var語句,但聲明局部變數時必須使用var語句
聲明提前:函數體內局部變數遮蓋同名全域變數,函數體內的變數聲明會提前至函數體頂部
聲明一個javascript全域變數時,實際上是定義了全域對象的一個屬性
javascript中,所有柱子都是浮點型的,除法運算結果也是浮點型 第三章
“===”:當兩運算元類型和值都相等。0===-0
“==”:若兩運算元不是同一類型,會嘗試進行類型轉換
加號運算子更偏愛字串;比較子更偏愛數字,只有兩個數都是字串時才會進行字串比較,若一個運算元是NaN,總返回false
大多數情況下 a op= b;等價於a = a op b;當a包含具有副作用的運算式時不等價,eg:data[i++]*=2; data[i++]=data[i++]*2;
typeof(NaN)==”number”;
delete只能刪除對象屬性或數組元素,不像C++中用來刪除整個對象 delete的運算元若不是左值,不進行操作返回true;若刪除成功,返回true