標籤:科學 continue Null 字元串 影響 efi 資料 通過 css undefined
3.1 文法
1.不以數字開頭的數字,字母,底線,貨幣符號
2.注釋:html <!-- --> css/**/ js單行// 多行/**/
3.ES5 引入了strict 模式(strict mode)。即為js定義的一種不同的解析與執行模型。 可以在整個指令碼頭部或者函數的上方,包含“use strict”來啟用strict 模式(ie10以上支援strict 模式)
3.2 關鍵字和保留字
3.3 變數
1.ECMAScript的變數是鬆散型的。即每個變數僅僅是一個用於儲存值的預留位置而已。
不存在定義某個變數就必須儲存該種資料類型的值的規則, “js”的變數相對於其他語言的變數,更加“放蕩”(不“始終如一”)。
2.未經初始化的變數,會儲存一個特殊值-----undefined。
3.使用未聲明(定義)的變數會報referenceError defined。
3.4 資料類型
1.typeof ①結果:undefined,number,string,boolean,obeject(object和null的值,null是一個空的對象引用);function
② 兩種用法:typeof 1 ; typeof(1)
2.undefined (已經定義,未被初始化的值)
defined(未被定義的)
3.null Null 參考
null和undefined 相等(==) 不全等(===)
4.boolean Null 字元串,0和NaN,null,undefined ==》false
5.number①用於儲存浮點數值需要的記憶體空間是儲存整數值的2倍。
②可以用科學計數法(e)表示浮點數 3e2 = 3*10的2次方 = 3*100
③浮點數的最高精度是17位元。
④浮點數計算會產生舍入誤差問題。(基於IEE754數值的浮點計算的通病)
0.1+0.2 = 0.30000000000000004
⑤isFinite(num) 確定num是不是無窮
⑥NaN 不與任何值相等,包括NaN本身 isNaN 判斷是否可以轉化成數值
isNaN(NaN)true NaN是特殊的數實值型別
isNaN(“blue”) false
isNaN(“11”) false
⑦Number() “”,null ,false =》 0
undefined=》NaN
忽略前置0,無法解析八進位
⑧paseInt() “”,null ,undefined =》 NaN
忽略前置0,無法解析八進位 所以加入第二個參數: paseInt("0x16",16) 基數16不帶引號
遇到無法轉換的字串時即停止。
⑨ paseFloat() 解析時第一個小數點有效,第二個小數點無效。
忽略前置0,只解析10進位數;16進位的字串會被轉化成0
paseFloat("1234Blue") // 1234paseFloat("0xA") // 0paseFloat("1.9.8") // 1.9
6.string()修改字串 : 要改變某個字串的值就要,”銷毀“原來的字串。“填充”新的字串。
這個過程是後台進行的。所以在某些舊版本的瀏覽器中,拼接字串速度很慢。
①toString() 轉化成字串 ,null和undefined沒有這個方法
toString(num) 可以輸出任何有效num制式表示的字串值
②轉型函數String();
7.object
3.5 操作符
1.一元 ①前置遞增/遞減 (1) 例如:--a; 先遞減1再參與運算
var a = 2;var b = --a + 2;alert(a) //1alert(b) //3
②後置遞增/遞減(1)
var a = 2;var b = a-- + 2;alert(a) //1alert(b) //4
2.位操作符 ①負數的二進位碼,使用的是二進位補碼
求二進位補碼:a,求這個值絕對值的二進位碼 b,二進位反碼(0->1,1->0)c.二進位碼+1 口訣:正,反,+1
①ECMAScript 所有數值都是以64位的格式儲存,但是位操作符不直接操作64位的值。而是先把64的值轉化成32位,操作32位,最後再把結果轉化成64位。
② 按位非 ~ 本質:-運算元-1
var n = 25;var n1 = ~n;alert(n1); //26 //-25-1
③按位與 & (10進位 -》 2進位 16 8 4 2 1)
④按位或 | ⑤按位異或 與 | 的不同,1&1= 0;
⑥(有符號)左移 <<,不會影響符號
⑦(有符號)右移 >>,不會影響符號
⑦(無符號)右移 > >>,影響符號(注意負數的是補碼)
3.布爾操作符 ① 邏輯非 ! ②邏輯與 && 短路與(a,一假則假 b,第一個為假以後就不會判斷第二個運算元)
var n = false;alert(n && bbbbb); //bbbbb是沒有定義的變數。正常情況下是會提示refrenceError defined的
③邏輯或 || 短路操作符 第一個為真以後就不會判斷第二個運算元
var n = true;alert(n || bbbbb); //bbbbb是沒有定義的變數。正常情況下是會提示refrenceError defined的
4.乘性操作符 (* / %)
5.加性操作符 ①+ 如果一個運算元是字串,則把另一個也轉換成字串
②0 - 0 = 0 ; 0- (-0) = 0;-0-(-0) = 0;
6.關係操作符 ①> < <= >= ②如果一個運算元是數值,則把另一個運算元也轉換成數值 ;
③如果2個運算元都是字串,則比較2個字串的字元編碼(大寫字母的字元編碼小於小寫字母的字元編碼)
var tre = “A” < "a"; //true console.log("23" < "3"); //true (此處都是字串)
7.相等操作符 ①== 比較的是值 (先轉換再比較)②=== 比較的是類型(只比較不轉換)
特殊情況:null == undefined; (記住即可)
8.條件操作符(?:) ①
var a = 1> 2?1:2; //a = 2
9.賦值操作符 = += *= -= /= %=
10.逗號操作符 ①用於執行多個操作(eg:聲明多個變數)
3.6 語句
1.if ①始終使用{} ②始終使用代碼塊分行
2.do-while(後測試迴圈)
3.while(前測試迴圈)
4.for ①在迴圈內部定義的i ,在外部仍然可以訪問它。
②for(;;) 無限迴圈
5.for in ① 可以枚舉對象屬性
②ECMAScript 對象的屬性沒有順序。所以通過for-in迴圈輸出的屬性名稱的順序是不可預測的。
③ 如果迭代對象 的值是null或者undefined,則不執行迴圈
④for(var x in arr)
6.label語句
7.break和continue ①break會立即退出迴圈,強制執行迴圈後面的語句
var num = 0; for (var i = 0; i < 10; i++) { if(i % 5 == 0){ break; } num ++; } alert(num) //num = 4;i = 5
②continue 會立即退出迴圈,從迴圈頂部繼續執行。
var num = 0; for (var i = 0; i < 10; i++) { if(i % 5 == 0){ continue; } num ++; } alert(num) //num = 8;i = 9
③與label語句的結合使用。
8.width 語句 ①為了簡化多次編寫同一個對象的工作。
width(location){ var url = href; }
9.switch操作符使用的是全等操作符
3.7 函數
1. ECMAScript中的函數,參數用數組表示。函數接觸的始終是這個數組,而不關心數組中包含哪些參數。所以即使定義的函數接受3個參數,單在使用時不一定要傳3個參數,可以少傳、多傳和不傳。
在函數體內部,通過arguments對象訪問參數數組。
2.arguments.length 可以得知有多少個參數傳輸給函數
3.function fun1(num1,num2){}
num1和arguments[0]的值會同步,但是它們的記憶體空間是獨立的。
4.重載:在其它語言(如java)中可以為一個函數編寫2個定義,只要這2個函數定義的簽名(接受的參數的類型和數量)不一樣即可。
ECMAScript中,參數是用數組表示的,因此對於函數來說參數的類型和數量都一樣,所以沒有簽名,沒有真正的重載。
JavaScript進階程式設計(第3版) 第三章 (基本概念)