JavaScript高級程序設(shè)計(第3版)學習筆記11 內(nèi)建js對象
1、內(nèi)建全局單例對象
(1)內(nèi)建全局單例對象:在整個執(zhí)行環(huán)境中只有一個對象實例,這些對象沒有內(nèi)部屬性[[Construct]]和[[Call]],因此不能使用new來創(chuàng)建,也不能作為函數(shù)來調(diào)用,而是直接使用對象名稱來引用其屬性和方法(對于全局對象,則可以直接使用屬性和方法名)。內(nèi)建全局單例對象有Global、Math、JSON。
(2)內(nèi)建常量:主要是指內(nèi)建全局單例對象的屬性,這些屬性的[[Writable]]、[[Configurable]]、[[Enumerable]]特性全部為false,因此不能修改屬性值,不能刪除屬性,也不能在for-in循環(huán)中枚舉。這些內(nèi)建常量有:
對象 | 名稱 | 常量值 | 說明 | 對象 | 名稱 | 常量值 | 說明 |
Global | NaN | NaN | 表示不是數(shù)值 | Math | E | ≈2.718 | 自然對數(shù)的底數(shù) e |
Infinity | +∞ | 正無窮 | LN10 | ≈2.303 | 2 的自然對數(shù) | ||
undefined | undefined | 未定義 | LN2 | ≈0.693 | 10的自然對數(shù) | ||
LOG2E | ≈1.443 | e 的以2 為底的對數(shù) | |||||
LOG10E | ≈0.434 | e 的以10為底的對數(shù) | |||||
PI | ≈3.142 | 圓周率,即圓周長與直徑的比 | |||||
SQRT1_2 | ≈0.707 | 2的平方根的倒數(shù) | |||||
SQRT2 | ≈1.414 | 2的平方根 |
注:Global對象中的常量可以使用名稱直接訪問,Math對象中的常量需使用類似Math.PI的形式來訪問。
(3)內(nèi)建靜態(tài)方法:
所屬對象 | 類別 | 方法 | 說明 |
Global | 全局解析方法 | eval(x) | 解析Javascript字符串,eval中定義的變量不會提升,在嚴格模式下,外部不能訪問eval內(nèi)定義的變量 |
字符串解析為Number | parseInt(string,radix) | 將字符串解析為整數(shù),可以傳入一個進制,會忽略前導空格 | |
parseFloat(string) | 將字符串解析為浮點數(shù),會忽略前導的空格和前導0 | ||
Number判斷方法 | isNaN(number) | 判斷是否為數(shù)字 | |
isFinite(number) | 判斷是否為有限數(shù) | ||
URI處理方法 | encodeURI(uri) | 對URI編碼,用于整個URI,用特殊的UTF-8編碼替換所有無效字符,不會對本身屬于URI的特殊字符編碼,如冒號,正斜杠,問號,井號等。 | |
decodeURI(ecodedURI) | 對使用ecnodeURI()編碼的字符串解碼 | ||
encodeURIComponent(uriComponent) | 對URI編碼,用于URI中的某一段,會對發(fā)現(xiàn)的任何非標準字符進行解碼 | ||
decodeURIComponent(encodedURIComponent) | 對使用ecnodeURIComponent()編碼的字符串解碼 | ||
內(nèi)建對象構(gòu)造器方法 |
Object、Function、Array、String、Number、Boolean、Date、RegExp Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError |
這里每一個構(gòu)造函數(shù)都構(gòu)成了一個內(nèi)建的對象類型 | |
Math | 三角函數(shù) | sin(x)、cos(x)、tan(x) | x的正弦、余弦、正切 |
反三角函數(shù) | asin(x)、acos(x)、atan(x)、atan2(y,x) | x的煩正弦、反余弦、反正切、y/x的反正切 | |
舍入函數(shù) | ceil(x)、floor(x)、round(x) | 向上舍入(大于該數(shù)的最小整數(shù))、向下舍入(小于該數(shù)的最大整數(shù))、四舍五入 | |
最值函數(shù) | max([value1[value2[,...]]])、min([value1[,value2[,...]]]) | 最大值、最小值 | |
隨機函數(shù) | random() | 返回介于0和1之間的隨機數(shù),不包括0和1.隨機公式:隨機值=Math.floor(Math.random() * 可能值的個數(shù) + 初始值) | |
其它常見數(shù)學函數(shù) | abs(x)、exp(x)、log(x)、pow(x,y)、sqrt(x) | 絕對值、Math.E的x次冪、x的自然對數(shù)、x的y次冪、x的平方根 | |
JSON | 解析 | parse(text[,reviver]) | 把JSON字符串解析外為Javascript值 |
序列化 | stringify(value[,replacer[,space]]) | 把Javascript對象序列號為JSON字符串,默認情況下不包括空格和縮進,所有函數(shù)、原型成員以及值為undefined的屬性會被忽略 |
說明:
(1)全局對象中還有escape()/unescape()方法,由于這兩個方法只能正確編碼ASCII字符已經(jīng)被廢棄,而使用上表中的encodeURI()等方法來替換。
(2)JSON.parse()可以接受一個可選的參數(shù),這個參數(shù)是一個函數(shù),被稱為還原函數(shù),還原函數(shù)返回一個值,接受兩個參數(shù):一個鍵和一個值。如果還原函數(shù)返回undefined,表示要從結(jié)果中刪除相應(yīng)的鍵,返回其他值,則將該值插入到結(jié)果中。
(3)JSON.stringify()可以接受二個可選參數(shù):
A、第一個可選參數(shù)是個過濾器,可以是一個數(shù)組,也可以是一個函數(shù)。如果是一個數(shù)組,那么結(jié)果中只保留這個數(shù)組中列出的屬性;如果是一個函數(shù),這個函數(shù)被稱為替換函數(shù),接受兩個參數(shù):一個鍵和一個值。替換函數(shù)返回undefined時會忽略這個鍵,否則就將返回值作為這個鍵的值插入到相應(yīng)位置。
B、第二個可選參數(shù)是個選項,表示是否在JSON字符串中保留縮進。如果這個參數(shù)是數(shù)字,表示每個級別縮進的空格數(shù)(最大不能超過10,超過10時自動設(shè)置為10),如果這個參數(shù)是字符串,則將作為縮進字符處理。
在調(diào)用JSON.stringify(obj)時,如果obj中有toJSON()方法并返回一個有效值時,會首先調(diào)用這個方法。
2、Object與Function
這兩個內(nèi)建對象在前面已經(jīng)重點討論過,這里總結(jié)一下:
對象/構(gòu)造函數(shù)/[[Class]] | 構(gòu)造器屬性(靜態(tài)屬性) | 原型屬性 | 實例屬性 | 內(nèi)部屬性 |
Object | prototype | constructor | [[Prototype]] | |
defineProperty() | toString() | [[Class]] | ||
defineProperties() | toLocaleString() | [[Extensible]] | ||
getOwnPropertyDescriptor() | valueOf() | [[Get]] | ||
preventExtensions() | hasOwnProperty() | [[GetOwnProperty]] | ||
seal() | propertyIsEnumerable() | [[GetProperty]] | ||
isSeal() | isPrototypeOf() | [[Put]] | ||
frozen() | [[CanPut]] | |||
isFreeze() | [[HasProperty]] | |||
create() | [[Delete]] | |||
getOwnPropertyNames() | [[DefaultValue]] | |||
getPrototypeOf() | [[DefineOwnProperty]] | |||
keys() | ||||
Function | prototype | call() | prototype | [[HasInstance]] |
length | apply() | length | [[Scope]] | |
bind() | [[FormalParameters]] | |||
[ 復(fù)制代碼 代碼如下: ] | ||||
[[Construct]] | ||||
[[Call]] |
說明:
(1)構(gòu)造器屬性(靜態(tài)屬性)是直接定義在構(gòu)造函數(shù)這個對象本身上的屬性,只能通過構(gòu)造函數(shù)名來直接訪問,原型屬性是定義在構(gòu)造函數(shù)原型對象上的屬性,可以通過原型去訪問,但更重要的是可以通過構(gòu)造函數(shù)的實例去訪問。比如上表Object對象的defineProperty()就只能以O(shè)bject.defineProperty()的形式來調(diào)用,而hasOwnProperty()這可以在任意一個Object實例對象上調(diào)用。
(2)Object本身是一個(構(gòu)造)函數(shù),也就是Function類的一個實例,因此也就有了Function實例所具有的屬性prototype和length(===1,上表未列出),同時,由于Object還是一個構(gòu)造函數(shù),也就構(gòu)成了一種(內(nèi)建)類型Object,通過原型繼承,這個類型是ES中所有其它類型的基類,也就是說所有的對象都可以訪問上表中Object的原型屬性。這里原型繼承是基于下面原理來實現(xiàn)的:Object原型的原型是null(即有Object.getPrototypeOf(Object.prototype)===null),其它對象的原型是Object的實例。
(3)Function是一個構(gòu)造函數(shù),因此構(gòu)成了一種內(nèi)建類型Function,同時,因為是函數(shù),也就是一個對象,這個對象的原型對象是Object的一個實例,因而可以訪問Object的原型屬性(Function類中有些方法覆蓋了Object中的原型方法,上表未列出)。
(4)注意區(qū)分Function類中的構(gòu)造器屬性和實例屬性,可以這樣來理解:首先Function類的所有實例都有屬性prototype(函數(shù)原型對象)和length(形式參數(shù)的個數(shù)),然后因為Function本身也是一個函數(shù),是Function類的一個實例,因此有prototype和length屬性(屬性值已經(jīng)確定了),而這屬性是直接定義在Function構(gòu)造函數(shù)上的,也就是構(gòu)造器屬性了。
(5)其它關(guān)于Object和Function中不理解的地方可以參考前面的文章,也可以自己查閱相關(guān)資料。
3、Array與String
將Array和String這兩種內(nèi)置對象放在一起,主要是因為他們有一些方法比較類似,我自己就常常有搞不拎清的時候,于是借這個機會比較一下。
功能類似方法 | Array對象獨有方法 | String對象獨有方法 | ||||||||
類別 | Array方法 | String方法 | 類別 | 方法 | 說明 | 類別 | 方法 | 說明 | ||
方法 | 說明 | 方法 | 說明 | |||||||
共有屬性 | length | 數(shù)組項的個數(shù),可以修改長度來實現(xiàn)添加或移除數(shù)組項的功能 | length | 字符串中字符的個數(shù) | 棧和隊列 | pop() | 移除數(shù)組最后一項,修改數(shù)組長度,返回被移除的項 | 去空格 | trim() | 去掉字符串前后的空格 |
對象創(chuàng)建 | 構(gòu)造函數(shù) |
1、new Array([item0[,item1[,...]]]) 2、new Array(len) 上面兩種方式的new可以省略 |
構(gòu)造函數(shù) |
new String([value]) 注意:上面的new省略時,則作為類型轉(zhuǎn)換函數(shù)調(diào)用 |
push() | 接受任意個參數(shù),把它們逐個添加到數(shù)組末尾,并返回修改后數(shù)組的長度 | 比較 | localeCompare() |
對象在參數(shù)前返回負數(shù) 相等返回0 后面返回正數(shù) | |
數(shù)組字面量 | 使用方括號[] | 字符串字面量 | 使用成對的單引號或成對的雙引號 | shift() | 移除數(shù)組第一項并返回,修改數(shù)組長度 | HTML方法 | 見附表 | 用于簡化常見HTML格式化任務(wù)的方法,已經(jīng)不建議使用 | ||
轉(zhuǎn)換方法 | toLocaleString() | 調(diào)用數(shù)組每一項的toLocaleString(),然后用逗號連接起來 | toLocaleString() | 返回對象表示的字符串 | unshift() | 接受任意個參數(shù),并添加到數(shù)組前面,返回新數(shù)組的長度 | 大小寫轉(zhuǎn)換 | toLowerCase() | 轉(zhuǎn)小寫 | |
toString() | 調(diào)用數(shù)組每一項的toString(),然后用逗號連接起來 | toString() | 返回對象表示的字符串 | 排序 | reverse() | 反轉(zhuǎn)數(shù)組項的順序 | toLocaleLowerCase() | |||
valueOf() | 返回數(shù)組本身,即有array === array.valueOf() | valueOf() | 返回對象表示的字符串 | sort() | 默認按升序排序,可以接受一個比較函數(shù) | toUpperCase() | 轉(zhuǎn)大寫 | |||
連接方法 | join() | 傳入一個參數(shù)作為分隔符,將數(shù)組每一項連接起來,默認為逗號 | + | 字符串相加 |
迭代方法 兩個參數(shù): 1、執(zhí)行函數(shù)(數(shù)組項的值,該項在數(shù)組中的位置,數(shù)組) 2、作用域 |
every() | 對數(shù)組中每一項運行執(zhí)行函數(shù),每一項都返回true時返回true | toLocaleUpperCase() | ||
concat() | 創(chuàng)建一個原數(shù)組的副本,將傳入的參數(shù)壓入新數(shù)組并返回新數(shù)組 | concat() | 拼接字符串,更多情況是直接使用“+”拼接 | some() | 對數(shù)組中每一項運行執(zhí)行函數(shù),如果有其中一項執(zhí)行函數(shù)返回true就返回true | 字符方法 | charAt() |
1個參數(shù):基于0的字符位置 charAt()返回單字符字符串,charCodeAt()返回字符編碼 | ||
截取方法 | slice() |
接受1至2個參數(shù),即要返回項的起始和結(jié)束位置 1、只有一個參數(shù)時,返回該參數(shù)位置開始到末尾的所有項 2、參數(shù)為負數(shù)時,加上數(shù)組長度使其變?yōu)檎龜?shù) |
slice() | 參數(shù):開始位置,最后一個字符后面的位置 | forEach() | 對數(shù)組中每一項運行執(zhí)行函數(shù),沒有返回值 | charCodeAt() | |||
splice |
第1個參數(shù):要刪除的起始項位置;第2個參數(shù):要刪除的項數(shù);第3個及之后的參數(shù):要插入的項 1、刪除:指定2個參數(shù),要刪除的第一項的位置和要刪除的項數(shù) 2、插入:提供3個參數(shù),起始位置,0,要插入的項 3、替換:提供3個參數(shù),起始位置,刪除的項數(shù),要插入的項 |
substr() | 參數(shù):開始位置,字符個數(shù) | map() | 對數(shù)組中每一項運行執(zhí)行函數(shù),返回每次調(diào)用的結(jié)果組成的數(shù)組 | fromCharCode() | 這是String對象的靜態(tài)函數(shù),將接受到的一或多個字符編碼轉(zhuǎn)變?yōu)樽址?/TD> | |||
substring() | 參數(shù):開始位置,最后一個字符后面的位置 |
filter() |
對數(shù)組中的每一項運行執(zhí)行函數(shù),返回執(zhí)行函數(shù)返回true的項組成的數(shù)組 | 模式匹配方法 | match() | 與RegExp的exec()方法相同,接受一個參數(shù),要么是一個正則表達式,要么是一個RegExp對象 | ||||
位置方法 | indexOf() |
接受兩個參數(shù):要查找的項和(可選)表示查找起點位置的索引,indexOf()從數(shù)組的開頭向后查找,lastIndexOf()則從數(shù)組末尾向前查找 |
indexOf() |
從字符串中查找子字符串,返回子字符串的位置,沒有找到返回-1,indexOf()從前往后查找,lastIndexOf()從后往前找 第二個可選參數(shù)表示從哪個位置開始搜索 |
縮小方法 | reduce() |
接受兩個參數(shù): 1、執(zhí)行函數(shù)(前一個值,當前值,項的索引,數(shù)組),這個函數(shù)的返回值會作為第一個參數(shù)自動傳入下一項,第一次迭代發(fā)生在數(shù)組的第二項上 2、(可選)初始值 reduce()從數(shù)組第一項開始,遍歷至最后,reduceRight()從數(shù)組最后一項開始,遍歷至第一項 |
search() | 接受一個參數(shù),和match()相同,返回字符串中第一個匹配項的索引,沒有找到匹配項時返回-1,search()始終從字符串開頭向后查找 | |
lastIndexOf() | lastIndexOf() | reduceRight() | replace() | 接受兩個參數(shù):一個RegExp對象或字符串和一個字符串或函數(shù),若第一個參數(shù)為字符串,則只會替換第一個字符串,若想替換所有子字符串,第一個參數(shù)必須為指定了全局標志(g)的正則表達式 | ||||||
判斷方法 | isArray() | 靜態(tài)方法,接受一個參數(shù),返回這個參數(shù)是否為Array | split() |
基于指定的分隔符將一個字符串分割成多個字符串,并將結(jié)果放在一個數(shù)組中返回,分隔符可以是字符串,也可以是正則表達式??蛇x的第二個參數(shù)用于指定數(shù)組的最大長度 |
說明:
(1)上表中紅色部分表示在ES5版本中新增的方法,藍色部分為個人認為比較常用的屬性和方法。
(2)ECMAScript中數(shù)組的每一項可以保存任意類型的數(shù)據(jù),并且數(shù)組的大小可以隨著數(shù)據(jù)的添加而自動的動態(tài)調(diào)整。
(3)使用Array構(gòu)造函數(shù)創(chuàng)建數(shù)組時,如果傳入一個數(shù)值類型的參數(shù),則作為數(shù)組長度處理,如果這個數(shù)值小于0或者不是一個整數(shù),會拋出RangeError異常(如果確實需要將這個數(shù)值作為數(shù)組第1項,可以使用數(shù)組字面量),其它數(shù)值類型的參數(shù),則作為數(shù)組的第一項值處理,并且數(shù)值的長度值為1。
[code]
try{
var a = new Array(-2);
}catch(e)
{
console.info(e);//RangeError
}
//var g = new Array(1.1);異常
var b = new Array(0);
var c = new Array(2);
var d = new Array('data');
var e = [-2];
var f = new Array(-1,-2);
console.info(b.length);//0
console.info(c.length);//2
console.info(d.length);//1
console.info(e.length);//1
console.info(f.length);//2
(4)判斷一個對象是否為數(shù)組時,在ES5中可以直接使用Array.isArray(obj), 在不支持isArray方法的環(huán)境中時,可以使用obj instanceof Array來判斷只有一個作用域的情況,但是更加穩(wěn)妥的判斷方法是利用Array對象的內(nèi)部屬性[[Class]]來判斷:
function isArray(obj){
return Object.prototype.toString.call(obj) == '[object Array]';
}
(5)關(guān)于String的slice()、sbustr()、substring(),如果只傳入了第一個參數(shù),則截取從第一個參數(shù)至末尾。當傳入負參數(shù)時:
A、slice()會將負參數(shù)加上字符串長度,使參數(shù)為正
B、substr()會將負的第一個參數(shù)加上字符串的長度,將負的第二個參數(shù)轉(zhuǎn)換為0
C、substring()會將所有負參數(shù)轉(zhuǎn)換為0,如果第2個參數(shù)小于第1個參數(shù),會互換兩個參數(shù)
(6)關(guān)于String對象replace()方法的第二個參數(shù)
如果是字符串,可以使用一些特殊字符將正則表達式操作得到的值插入到結(jié)果字符串中,這些特殊字符有:
字符序列 | 替換文本 |
$$ | $ |
$& | 匹配整個模式的字符串,與RegExp.lastMatch的值相同 |
$' | 匹配的子字符串之前的子字符串,與RegExp.leftContext的值相同 |
$` | 匹配的子字符串之后的子字符串,與RegExp.rightContext的值相同 |
$n | 匹配第n個捕獲組的子字符串,其中n等于1~9,如果正則表達式中沒有定義捕獲組,則使用空字符串 |
$nn | 匹配第nn個捕獲組的子字符串,其中n等于01~99,如果正則表達式中沒有定義捕獲組,則使用空字符串 |
如果是函數(shù),這個函數(shù)接受的參數(shù):模式的匹配項,第一個捕獲組的匹配項,...,第n個捕獲組的匹配項,模式的匹配項在字符串中的位置,原始字符串。函數(shù)應(yīng)該返回一個字符串,表示應(yīng)該被替換的匹配項。
(7)String對象的HTML方法
方法 | 輸出結(jié)果 | 方法 | 輸出結(jié)果 |
anchor(name) | <a name="name">string</a> | italics() | <i>string</i> |
big() | <big>string</big> | link(url) | <a href="url">url</a> |
bold() | <b>string</b> | small() | <small>string</small> |
fixed() | <tt>string</tt> | strike() | <strike>string</strike> |
fontcolor(color) | <font color="color">string</font> | sub() | <sub>string</sub> |
fontsize(size) | <font size="size">string</font> | sup() | <sup>string</sup> |
4、Number與Boolean
String、Number和Boolean對象是相應(yīng)簡單數(shù)據(jù)類型的包裝對象,他們都有一個共同的特征:作為構(gòu)造函數(shù)調(diào)用時是創(chuàng)建一個對象,作為一般函數(shù)調(diào)用時則是類型轉(zhuǎn)換。由于所有對象相應(yīng)的Boolean類型值都是true,所以需要特別注意的是new Boolean(false)在布爾運算中會作為true去處理,這里的建議就是永遠不要使用Boolean對象。
var falseValue = false;
var falseObject = new Boolean(false);
console.info(typeof falseValue);//boolean
console.info(typeof falseObject);//object
console.info(falseValue instanceof Boolean);//false
console.info(falseObject instanceof Boolean);//true
console.info(falseValue && true);//false
console.info(falseObject && true);//true
String、Number和Boolean類型的變量可以直接調(diào)用相應(yīng)包裝對象的方法,實際上在后臺會自動轉(zhuǎn)換為相應(yīng)包裝對象,然后調(diào)用方法。String和Boolean類型的字面量也可以直接調(diào)用包裝對象的方法,但是Number類型的字面量不能直接調(diào)用Number對象的方法。
var num = 10;
console.info(num.toFixed(2));//10.00
//console.info(10.toFixed(2));//異常
console.info(false.toString());//false
console.info('abcdefg'.substr(3));//defg
關(guān)于包裝對象的屬性和方法,String對象已經(jīng)在上一小節(jié)列出,Boolean對象除覆蓋了Object的toString()和valueOf()外沒什么特別需要注意的,下面再總結(jié)一下Number對象的屬性和方法。
靜態(tài)屬性(常量) | 說明 | 方法 | 說明 |
Number.MAX_VALUE | Number類型能夠表示的最大值 | valueOf() | 返回對象表示的基本類型的數(shù)值 |
Number.MIN_VALUE | Number類型能夠表示的最小值 | toLocaleString() | 返回對象表示的數(shù)值的字符串形式 |
Number.NaN | NaN | toString() | 返回對象表示的數(shù)值的字符串形式,可以接受一個表示進制的參數(shù) |
Number.NEGAIVE_INFINITY | 負無窮 | toFixed() | 按照指定的小數(shù)位返回數(shù)值的字符串表示,如果數(shù)值比指定的小數(shù)位多,會進行四舍五入處理 |
Number.POSITIVE_INFINITY | 正無窮 | toExponential() | 返回以指數(shù)表示法表示的數(shù)值的字符串形式,接受一個表示小數(shù)個數(shù)的參數(shù) |
toPrecision() | 接受一個表示數(shù)值的所有數(shù)字的位數(shù)(不包括指數(shù)部分),可能返回固定大小格式,也可能返回指數(shù)形式 |
5、Date
ECMAScript中的Date對象和Java中的java.util.Date一樣,采用UTC(Coordinated Universal Time,國際協(xié)調(diào)時間)1970年1月1日午夜(零時)開始經(jīng)過的毫秒數(shù)來保存日期。
(1)創(chuàng)建日期對象
A、構(gòu)造函數(shù):可以通過new Date()創(chuàng)建對象自動獲取當前日期和時間,也可以傳入表示日期的毫秒數(shù)來創(chuàng)建日期,還可以傳入和下面的Date.parse()與Date.UTC()相同的參數(shù)(在后臺會先調(diào)用Date.parse()或Date.UTC(),后臺調(diào)用Date.UTC()時是基于系統(tǒng)本地時區(qū)而非GMT創(chuàng)建的)來創(chuàng)建日期。
B、Date.parse():接受一個表示日期的字符串參數(shù),然后嘗試根據(jù)這個字符串返回相應(yīng)日期的毫秒數(shù)。日期格式和具體的實現(xiàn)及地區(qū)有關(guān)。如果傳入的字符串不能表示日期,返回NaN。
C、Date.UTC():返回表示日期的毫秒數(shù),參數(shù)分別是年份、基于0的月份、月中的哪一天(1~31)、小時(0~23)、分鐘、秒以及毫秒數(shù),這些參數(shù)中,前面兩個參數(shù)(年月)是必須的,沒有提供天數(shù)時默認為1,其它參數(shù)沒有提供時默認為0。
D、Date.now():在ES5中新增,返回表示調(diào)用這個方法的日期和時間的毫秒數(shù)。這可以用來分析代碼執(zhí)行的時間:
//支持Date.now()時 //不支持Date.now()的情況下
var start = Date.now(); var start = +new Date();
//doSomething(); //doSomething();
var end = Date.now(); var end = +new Date();
var time = end -start; var time = end - start;
(2)方法列表
方法 | 說明 | getter/setter方法 | 說明 |
toLocaleString() | 按照與瀏覽器設(shè)置的地區(qū)相適應(yīng)的格式返回日期和時間,其中時間一般以12小時制表示(通常含AM或PM) | setTime(毫秒) | 沒有對應(yīng)的UTC方法 |
toString() | 通常返回帶有時區(qū)信息的日期和時間,其中時間一般以24小時制表示 | setFullYear(年) | 4位數(shù)的年份 |
valueOf() | 返回日期的毫秒表示,這為日期的比較提供了便利 | setMonth(月) | 0~11,0表示一月,11表示十二月,超過11增加年份 |
toDateString() | 以特定于實現(xiàn)的格式顯示星期幾、月、日和年 | setDate(日) | 超過范圍時會增加月份 |
toTimeString() | 以特定于實現(xiàn)的格式顯示時、分、秒和時區(qū) | setHours(時) | 傳入值超過了23會增加天數(shù) |
toLocaleDateString() | 以特定于實現(xiàn)的格式顯示星期幾、月、日和年 | setMinutes(分) | 傳入值超過了59會增加小時數(shù) |
toLocaleTimeString() | 以特定于實現(xiàn)的格式顯示時、分、秒 | setSeconds(秒) | 傳入值超過了59會增加分鐘數(shù) |
toUTCString() | 以特定于實現(xiàn)的格式顯示完整的UTC日期 | setMilliseconds(毫秒) | |
toGMTString() | 和toUTCString()等價,主要是為了向后兼容而保留的 | getDay() | 沒有對應(yīng)的setter方法,0表示星期日,6為星期六 |
getTimezoneOfSet() | 返回本地時間與UTC時間相差的毫秒數(shù) |
說明:上表getter/setter列中,除了setTime()外,均有一套相應(yīng)UTC方法,比如對應(yīng)setFullYear()有g(shù)etFullYear()、setUTCFullYear()、getUTCFullYear()方法。
6、Error
(1)從ES3開始引入了try-catch語句,用于捕獲異常,結(jié)構(gòu)和Java中的異常處理類似。這里需要注意的是,在使用finally子句時,如果里面有return語句,由于finally語句無論怎樣都會執(zhí)行,因此會覆蓋之前的return語句。
function testFinally(){
try{
return 2;
}catch(error){
return 1;
}finally{
return 0;
}
}
console.info(testFinally());//0
說明:按照規(guī)范,catch和finally子句只要有一個即可,但是在IE7的實現(xiàn)中有一個bug,沒有catch子句時就不會執(zhí)行finally子句,所以為了保證兼容性,每一個try都加上catch子句(如果需要在外層處理,可以把捕獲的異常使用throw向外拋出)。
(2)錯誤類型
錯誤類型 | 說明 |
Error | Error是所有錯誤類型的父類,因此所有錯誤類型共享了一組相同的屬性和方法,這個基類型的主要作用是供開發(fā)人員拋出自定義錯誤 |
EvalError | 在使用eval()函數(shù)而發(fā)生異常時拋出,簡單的說,如果沒有把eval()當成函數(shù)調(diào)用,就會拋出錯誤 |
RangeError | 在數(shù)值超出范圍時拋出,如定義數(shù)組時傳入負參數(shù)就會拋出RangeError |
ReferenceError | 找不到對象的情況下拋出 |
SyntaxError | 把語法錯誤的字符串傳入eval()時拋出 |
TypeError | 在變量中保存著意外的類型,或者訪問不存在的方法時,會導致這種錯誤 |
URIError | 在使用encodeURI()或decodeURI(),URI格式不正確時拋出 |
注:這里只是簡要列舉了一些內(nèi)建的錯誤對象,沒有對錯誤處理以及調(diào)試技術(shù)做過多的闡述,感興趣的朋友可以自行查找相關(guān)資料。
- JavaScript高級程序設(shè)計(第3版)學習筆記13 ECMAScript5新特性
- JavaScript高級程序設(shè)計(第3版)學習筆記12 js正則表達式
- JavaScript高級程序設(shè)計(第3版)學習筆記10 再訪js對象
- JavaScript高級程序設(shè)計(第3版)學習筆記9 js函數(shù)(下)
- JavaScript高級程序設(shè)計(第3版)學習筆記8 js函數(shù)(中)
- JavaScript高級程序設(shè)計(第3版)學習筆記7 js函數(shù)(上)
- JavaScript高級程序設(shè)計(第3版)學習筆記6 初識js對象
- JavaScript高級程序設(shè)計(第3版)學習筆記5 js語句
- JavaScript高級程序設(shè)計(第3版)學習筆記4 js運算符和操作符
- JavaScript高級程序設(shè)計(第3版)學習筆記3 js簡單數(shù)據(jù)類型
- JavaScript高級程序設(shè)計(第3版)學習筆記2 js基礎(chǔ)語法
- JavaScript高級程序設(shè)計(第3版)學習筆記 概述