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