《JavaScript權威指南》學習筆記
一、javascript資料型別和變數
javascript中相同的變數可以儲存不同型別的資料,它是鬆散型別或動態型別,上下文環境將決定變數的資料型別。
1 標識變數
變數命名限制:ECMAScript關鍵字和瀏覽器物件模型(BOM)中的內建關鍵字不可以被用作變數名。
2 基本型別
Javascript有3種基本資料型別:字串,數字以及布林型;此外,Javascript提供了一些內建物件:String,Number和Boolean。基本資料型別是基本值的型別,而內建物件擁有內建屬性和方法,內建物件會封裝各自的基本型別並呼叫內建屬性和方法。
String資料型別
Javascript是鬆散型別的語言,字串變數或者數字型別、布林型便來能在宣告時沒有差別;字串變數宣告時把文字賦給String型變數,並且對便來能進行初始化之後才定義了變數的上下文。
字串文字是由單引號或雙引號所引用的一系列字元;使用單雙引號引用並未規定,只需要前後配對即可;若字串中需要包含單引號或者雙引號,在使用另一種引號進行引用即可,或者使用轉義。
字串轉義
字串中除可以放入普通字元外,換可以放入轉義字元。轉義符是通過特定方式將一些特殊字元放在字串中的模式;除此之外,還可把Unicode字元放在字串中。
\n \\ \” \u7231
字串編碼
EncodeURI和encodeURIComponent方法可以將字串從ASCII碼或非ASCII碼字元轉換為URIencoding的字元;這兩個函式也都有對應的解碼方法decodeURI和decodeURIComponet。
字串轉換
數字、布林值等其他資料型別都可以轉換為字串,指令碼引擎會根據上下文自動完成轉換。
Boolean資料型別
布林值可以顯式(使用Boolean函式將其他資料型別的值轉換為布林值)地賦給不同型別的變數;雙重否定操作符可以用來顯式地將陣列或字串轉換為布林值:
varsomeValue = 0;
varsomeBool = Boolean(someValue);
varstrValue = “1”;
varnumValue = 90;
var boolValue =!!strValue;
boolValue =!!numValue;
toBoolean轉換表請關注,其他型別轉換為布林值的轉換規則。
Number資料型別
Javascript中,Number資料型別時浮點數,可以包含小數部分,也可以沒有小數部分;若沒有小數部分,則將被當做十進位制整數;若包含小數部分,可以使用指數形式表示。
兩個特殊的數字:正無窮大(Infinity)和負無窮大(-Infinity);數字型別上溢返回正無窮大,下溢返回負無窮大。
除十進位制外,換可以使用八進位制和十六進位制來表示數字;如果使用String函式將八進位制或十六進位制數字轉換為字串,則指令碼引擎首先會將數字轉換為十進位制,然後再將結果轉換為字串。
兩個函式:parseInt(); 無論字串是一個整數,還是浮點數,只返回數字的整數部分;從字串中識別數字部分,直到遇到第一個非數字為止,如:”1.23e-2”,解析的結果是:1; 如果第一個字母不是數字,則直接返回NaN;此外,此函式第二個引數是要轉換的數制,所以使用此函式可以實現數字各個數制之間的轉換。
parseFloat(); 從字串第一個數字開始識別數字部分,直到遇到第一個非數字為止,返回十進位制表示的浮點型數值;如果第一個字母不是數字,則直接返回NaN
除將字串轉換為Number外,Number函式也可以用來將其他資料型別轉換為數字,包含浮點型的字串將返回浮點數,包含整數的字串將返回整數。還可以使用IsFinite函式判斷變數的數值是否是無窮大,若是無窮大或者NaN,返回false,否則返回true。
具體轉換關係見轉換表。
null和undefiled
null變數是已定義的、值為null的變數:var nullString = null;
如果便來能已經宣告但是沒有初始化,那麼就是undefined變數: var updefString;
如果聲明瞭變數且賦予了初始值,則該變數就不是null或者undefined:var sValue = “”;
可以使用條件語句判斷變數值。
可以使用isNaN()函式判斷一個變數是否是NaN;
總結:0,null,NaN以及空字串都是false,其他都是true.
常量
常量是已命名數值,但不是變數;不可以重新賦值,宣告時就必須完成初始化,一般宣告為全域性變數,名稱為全大寫。
const CURRENT_MONTH = 3.5;
二、操作符和語句
賦值語句
var a,b=2;// b 是undefined
算術操作符
二元操作符
+ - * / % 所有的二元操作符都可以用於字串,但是字串必須可以正確轉換為數字;在進行計算前會先將字串轉換為數字
如果運用於字串:加法符號對字串執行連線操作;如果將字串和數字進行加法操作,也是執行連線操作。
一元操作符
++ -- -(負數)
自操作符
位操作符
位操作符將運算元當做32位的二進位制數,然後按位操作:& | ^ ~
條件分支語句和程式流
If else
Switch
條件操作符
相等/相同操作符
==:比較變數值是否相等;會自動轉換變數的資料型別為數字,然後再做比較。Switch語句中隱式地使用了此操作符用於判斷“相等”。對應的:!=
===:用來判斷變數的數值和型別,它只有在運算元的數值相同切型別相同的情況下才返回true。對應的:!==
關係操作符號
唯一的三元操作符
邏輯操作符
物件屬性操作符
.
高階語句
迴圈
While/dowhile/for
三、javascript物件
Javascript基本物件:第一種:與資料型別平行的封裝物件;
第二種:Math、Date、RegExp
第三種:Array
基本資料型別物件
new關鍵字
對於基本型別,在建立時若不使用new關鍵字,則只是建立基本型別;如果使用了new關鍵字,則建立了封裝物件例項。
Var strName =“majq”; //建立基本型別
Var strName2 =String(“majq”); //建立基本型別
Var strName3 =new String(“majq”);//建立封裝物件型別
建立基本型別後也可以直接使用封裝物件的屬性和方法,其實質是引擎會自動建立一個臨時物件以供使用,在使用完畢之後會自動銷燬此臨時物件。
Boolean物件
Boolean物件沒有自己的屬性,只有繼承自Object的屬性;Boolean物件例項有不同的方法,取決於初始值是false還是true,如果未對Boolean物件進行初始化,則預設初始值為false;
可以使用預設初始化、0/1、true/false,””/非空字串對boolean物件進行初始化,值同資料型別轉換規則。
Boolean物件只有兩個繼承方法:toString(),valueOf();
Number物件
Number靜態屬性:
MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY
正負無窮大用來判斷溢位;而最大最小可表示數可用來獲取可表示最大最小值。
Number例項方法
ToExponential 以字串形式返回數值的指數格式
ToFixed 以字串形式返回數值的固定位數格式
toPrecision 以字串形式返回數值的特定精確格式
valueOf/toStringtoString方法可以傳入數制引數,進行數制轉換後輸出
toLocaleString返回與環境相關的數值格式
String物件
屬性:
length
方法:
valueOf
charAt
charCodeAt
concat 連線字串
split 分割字串
slice 返回字串的某個片段
substring,substr 返回子字串
match,replace,search 正則表示式匹配,替換和查詢
toLowercase,toUpperCase 大小寫轉換
正則表示式和RegExp
var searchPattern = new RegExp(‘s+’); //顯式建立正則表示式
var searchPattern = /s+/; //文字量方式建立正則表示式
RegExp
例項方法
Test 測試正則表示式與文字是否匹配
Exec 返回一個數組
Date物件
Math物件
Array物件
var newArray = new Array(‘1’,’2’);
var newArray = [‘1’,’2’];
在建立陣列物件時,引擎會立即將基本資料型別轉換為Array物件,並將結果賦給變數。
可以根據固定元素個數建立陣列,也可以不提供元素個數任意新增元素。
屬性
length
方法
Splice 在陣列總插入或刪除元素
Slice 分割陣列 不改變原來的陣列,返回新陣列
Concat 連線不同的陣列 不改變原來的陣列,返回新陣列
Join 使用指定的分割符生成字串
Reverse 對陣列執行倒序排列
佇列
Array物件有4個用於維護佇列和列表的方法:
push:在最後一個元素後面加入元素,返回陣列新的長度
unshift 在第一個元素前面加入元素,返回陣列新的長度
pop:從陣列最末尾移除一個元素,返回被移除的元素
shift:從陣列頭部移除一個元素,返回被移除的元素
所以:
FIFO佇列:先進先出
加入在隊尾(push),移除在隊首(shift)
加入在隊首,移除在隊尾
LIFO佇列:先進後出
加入在隊尾,移除在隊尾
加入在隊首,移除在隊首
四、函式
Javascript中,可以將函式賦給一個變數或陣列元素,也可以將其作為一個引數傳給一個函式呼叫。Javascript中函式有三種建立方法:宣告式的/靜態的、動態的/匿名的、字面量式的。
函式宣告的方式
引數中的基本型別變數傳給函式的實際上是原始值,如一個字串、一個布林值、一個數字等;這也就意味著在函式中修改實際引數值,不會影響呼叫程式。
對於傳給函式的物件而言,傳遞的則是一個指向原始物件的引用,在函式中對這個物件的修改將會反映在呼叫程式中。