JavaScript進階程式設計(第3版)學習筆記11 內建js對象

來源:互聯網
上載者:User

內建對象就好比是JDK中的類庫,開發人員可以直接拿來使用,這極大的方便了常見的編程任務。這篇文章就來瀏覽一下主要的內建對象,當然,我們並不是第一次接觸內建對象,前面已經接觸到的就有Object、Function、Boolean、Number、String,對於已經介紹過的,這裡再總結複習一下,沒有介紹過的,根據相關性來對比的總結,RegExp對象及Regex在下一篇中再單獨介紹。

1、內建全域單例對象

(1)內建全域單例對象:在整個執行環境中只有一個對象執行個體,這些對象沒有內部屬性[[Construct]]和[[Call]],因此不能使用new來建立,也不能作為函數來調用,而是直接使用對象名稱來引用其屬性和方法(對於全域對象,則可以直接使用屬性和方法名)。內建全域單例對象有Global、Math、JSON。

(2)內建常量:主要是指內建全域單例對象的屬性,這些屬性的[[Writable]]、[[Configurable]]、[[Enumerable]]特性全部為false,因此不能修改屬性值,不能刪除屬性,也不能在for-in迴圈中枚舉。這些內建常量有:

對象 名稱 常量值 說明 對象 名稱 常量值 說明
Global NaN NaN 表示不是數值 Math E ≈2.718 自然對數的底數 e
Infinity +∞ 正無窮 LN10 ≈2.303 2 的自然對數
undefined undefined 未定義 LN2 ≈0.693 10的自然對數
LOG2E ≈1.443 e 的以2 為底的對數
LOG10E ≈0.434 e 的以10為底的對數
PI ≈3.142 圓周率,即圓周長與直徑的比
SQRT1_2 ≈0.707 2的平方根的倒數
SQRT2 ≈1.414 2的平方根

註:Global對象中的常量可以使用名稱直接存取,Math對象中的常量需使用類似Math.PI的形式來訪問。

(3)內建靜態方法:

所屬對象 類別 方法 說明
Global 全域解析方法 eval(x) 解析Javascript字串,eval中定義的變數不會提升,在strict 模式下,外部不能訪問eval內定義的變數
字串解析為Number parseInt(string,radix) 將字串解析為整數,可以傳入一個進位,會忽略前置空格
parseFloat(string) 將字串解析為浮點數,會忽略前置的空格和前置0
Number判斷方法 isNaN(number) 判斷是否為數字
isFinite(number) 判斷是否為有限數
URI處理方法 encodeURI(uri) 對URI編碼,用於整個URI,用特殊的UTF-8編碼替換所有無效字元,不會對本身屬於URI的特殊字元編碼,如冒號,正斜杠,問號,井號等。
decodeURI(ecodedURI) 對使用ecnodeURI()編碼的字串解碼
encodeURIComponent(uriComponent) 對URI編碼,用於URI中的某一段,會對發現的任何非標準字元進行解碼
decodeURIComponent(encodedURIComponent) 對使用ecnodeURIComponent()編碼的字串解碼
內建物件建構器方法

Object、Function、Array、String、Number、Boolean、Date、RegExp

Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError

這裡每一個建構函式都構成了一個內建的物件類型
Math 三角函數 sin(x)、cos(x)、tan(x) x的正弦、餘弦、正切
反三角函數 asin(x)、acos(x)、atan(x)、atan2(y,x) x的煩正弦、反餘弦、反正切、y/x的反正切
舍入函數 ceil(x)、floor(x)、round(x) 向上舍入(大於該數的最小整數)、向下舍入(小於該數的最大整數)、四捨五入
最值函數 max([value1[value2[,...]]])、min([value1[,value2[,...]]]) 最大值、最小值
隨機函數 random() 返回介於0和1之間的隨機數,不包括0和1.隨機公式:隨機值=Math.floor(Math.random() * 可能值的個數 + 初始值)
其它常見數學函數 abs(x)、exp(x)、log(x)、pow(x,y)、sqrt(x) 絕對值、Math.E的x次冪、x的自然對數、x的y次冪、x的平方根
JSON 解析 parse(text[,reviver]) 把JSON字串解析外為Javascript值
序列化 stringify(value[,replacer[,space]]) 把Javascript對象序號為JSON字串,預設情況下不包括空格和縮排,所有函數、原型成員以及值為undefined的屬性會被忽略

說明:

(1)全域對象中還有escape()/unescape()方法,由於這兩個方法只能正確編碼ASCII字元已經被廢棄,而使用上表中的encodeURI()等方法來替換。

(2)JSON.parse()可以接受一個可選的參數,這個參數是一個函數,被稱為還原函數,還原函數返回一個值,接受兩個參數:一個鍵和一個值。如果還原函數返回undefined,表示要從結果中刪除相應的鍵,返回其他值,則將該值插入到結果中。

(3)JSON.stringify()可以接受二個選擇性參數:

  A、第一個選擇性參數是個過濾器,可以是一個數組,也可以是一個函數。如果是一個數組,那麼結果中只保留這個數組中列出的屬性;如果是一個函數,這個函數被稱為替換函數,接受兩個參數:一個鍵和一個值。替換函數返回undefined時會忽略這個鍵,否則就將傳回值作為這個鍵的值插入到相應位置。

  B、第二個選擇性參數是個選項,表示是否在JSON字串中保留縮排。如果這個參數是數字,表示每個層級縮排的空格數(最大不能超過10,超過10時自動化佈建為10),如果這個參數是字串,則將作為縮排字元處理。

  在調用JSON.stringify(obj)時,如果obj中有toJSON()方法並返回一個有效值時,會首先調用這個方法。

2、Object與Function

  這兩個內建對象在前面已經重點討論過,這裡總結一下:

對象/建構函式/[[Class]] 構造器屬性(靜態屬性) 原型屬性 執行個體屬性 內部屬性
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]]
[複製代碼 代碼如下:]
[[Construct]]
[[Call]]

說明:

(1)構造器屬性(靜態屬性)是直接定義在建構函式這個對象本身上的屬性,只能通過建構函式名來直接存取,原型屬性是定義在建構函式原型對象上的屬性,可以通過原型去訪問,但更重要的是可以通過建構函式的執行個體去訪問。比如上表Object對象的defineProperty()就只能以Object.defineProperty()的形式來調用,而hasOwnProperty()這可以在任意一個Object執行個體對象上調用。

(2)Object本身是一個(構造)函數,也就是Function類的一個執行個體,因此也就有了Function執行個體所具有的屬性prototype和length(===1,上表未列出),同時,由於Object還是一個建構函式,也就構成了一種(內建)類型Object,通過原型繼承,這個類型是ES中所有其它類型的基類,也就是說所有的對象都可以訪問上表中Object的原型屬性。這裡原型繼承是基於下面原理來實現的:Object原型的原型是null(即有Object.getPrototypeOf(Object.prototype)===null),其它對象的原型是Object的執行個體。

(3)Function是一個建構函式,因此構成了一種內建類型Function,同時,因為是函數,也就是一個對象,這個對象的原型對象是Object的一個執行個體,因而可以訪問Object的原型屬性(Function類中有些方法覆蓋了Object中的原型方法,上表未列出)。

(4)注意區分Function類中的構造器屬性和執行個體屬性,可以這樣來理解:首先Function類的所有執行個體都有屬性prototype(函數原型對象)和length(形式參數的個數),然後因為Function本身也是一個函數,是Function類的一個執行個體,因此有prototype和length屬性(屬性值已經確定了),而這屬性是直接定義在Function建構函式上的,也就是構造器屬性了。

(5)其它關於Object和Function中不理解的地方可以參考前面的文章,也可以自己查閱相關資料。

3、Array與String

  將Array和String這兩種內建對象放在一起,主要是因為他們有一些方法比較類似,我自己就常常有搞不拎清的時候,於是借這個機會比較一下。

功能類似方法 Array對象專屬方法 String對象專屬方法
類別 Array方法 String方法 類別 方法 說明 類別 方法 說明
方法 說明 方法 說明
共有屬性 length 數組項的個數,可以修改長度來實現添加或移除數組項的功能 length 字串中字元的個數 棧和隊列 pop() 移除數組最後一項,修改數組長度,返回被移除的項 去空格 trim() 去掉字串前後的空格
對象建立 建構函式

1、new Array([item0[,item1[,...]]])

2、new Array(len)

上面兩種方式的new可以省略

建構函式

new String([value])

注意:上面的new省略時,則作為類型轉換函式調用

push() 接受任意個參數,把它們逐個添加到數組末尾,並返回修改後數組的長度 比較 localeCompare()

對象在參數前返回負數

相等返回0

後面返回正數

數組字面量 使用方括弧[] 字串字面量 使用成對的單引號或成對的雙引號 shift() 移除數組第一項並返回,修改數組長度 HTML方法 見附表 用於簡化常見HTML格式化任務的方法,已經不建議使用
轉換方法 toLocaleString() 調用數組每一項的toLocaleString(),然後用逗號串連起來 toLocaleString() 返回對象表示的字串 unshift() 接受任意個參數,並添加到數組前面,返回新數組的長度 大小寫轉換 toLowerCase() 轉小寫
toString() 調用數組每一項的toString(),然後用逗號串連起來 toString() 返回對象表示的字串 排序 reverse() 反轉數組項的順序 toLocaleLowerCase()
valueOf() 返回數組本身,即有array === array.valueOf() valueOf() 返回對象表示的字串 sort() 預設按升序排序,可以接受一個比較函數 toUpperCase() 轉大寫
串連方法 join() 傳入一個參數作為分隔字元,將數組每一項串連起來,預設為逗號 + 字串相加

迭代方法

兩個參數:

1、執行函數(數組項的值,該項在數組中的位置,數組)

2、範圍

every() 對數組中每一項運行執行函數,每一項都返回true時返回true toLocaleUpperCase()
concat() 建立一個原數組的副本,將傳入的參數壓入新數組並返回新數組 concat() 拼接字串,更多情況是直接使用“+”拼接 some() 對數組中每一項運行執行函數,如果有其中一項執行函數返回true就返回true 字元方法 charAt()

1個參數:基於0的字元位置

charAt()返回單字元字串,charCodeAt()返回字元編碼

截取方法 slice()

接受1至2個參數,即要返回項的起始和結束位置

1、只有一個參數時,返回該參數位置開始到末尾的所有項

2、參數為負數時,加上數組長度使其變為正數

slice() 參數:開始位置,最後一個字元後面的位置 forEach() 對數組中每一項運行執行函數,沒有傳回值 charCodeAt()
splice

第1個參數:要刪除的起始項位置;第2個參數:要刪除的項數;第3個及之後的參數:要插入的項

1、刪除:指定2個參數,要刪除的第一項的位置和要刪除的項數

2、插入:提供3個參數,起始位置,0,要插入的項

3、替換:提供3個參數,起始位置,刪除的項數,要插入的項

substr() 參數:開始位置,字元個數 map() 對數組中每一項運行執行函數,返回每次調用的結果組成的數組 fromCharCode() 這是String對象的靜態函數,將接受到的一或多個字元編碼轉變為字串
substring() 參數:開始位置,最後一個字元後面的位置

filter()

對數組中的每一項運行執行函數,返回執行函數返回true的項組成的數組 模式比對方法 match() 與RegExp的exec()方法相同,接受一個參數,要麼是一個Regex,要麼是一個RegExp對象
位置方法 indexOf()

接受兩個參數:要尋找的項和(可選)表示尋找起點位置的索引,indexOf()從數組的開頭向後尋找,lastIndexOf()則從數組末尾向前尋找
在比較項是否相等時,會使用全等比較,沒有找到返回-1

indexOf()

從字串中尋找子字串,返回子字串的位置,沒有找到返回-1,indexOf()從前往後尋找,lastIndexOf()從後往前找

第二個選擇性參數表示從哪個位置開始搜尋

縮小方法 reduce()

接受兩個參數:

1、執行函數(前一個值,當前值,項的索引,數組),這個函數的傳回值會作為第一個參數自動傳入下一項,第一次迭代發生在數組的第二項上

2、(可選)初始值

reduce()從數組第一項開始,遍曆至最後,reduceRight()從數組最後一項開始,遍曆至第一項

search() 接受一個參數,和match()相同,返回字串中第一個匹配項的索引,沒有找到匹配項時返回-1,search()始終從字串開頭向後尋找
lastIndexOf() lastIndexOf() reduceRight() replace() 接受兩個參數:一個RegExp對象或字串和一個字串或函數,若第一個參數為字串,則只會替換第一個字串,若想替換所有子字串,第一個參數必須為指定了全域標誌(g)的Regex
判斷方法 isArray() 靜態方法,接受一個參數,返回這個參數是否為Array split()

基於指定的分隔字元將一個字串分割成多個字串,並將結果放在一個數組中返回,分隔字元可以是字串,也可以是Regex。可選的第二個參數用於指定數組的最大長度

說明:

(1)上表中紅色部分表示在ES5版本中新增的方法,藍色部分為個人認為比較常用的屬性和方法。

(2)ECMAScript中數組的每一項可以儲存任意類型的資料,並且數組的大小可以隨著資料的添加而自動的動態調整。

(3)使用Array建構函式建立數組時,如果傳入一個數實值型別的參數,則作為數組長度處理,如果這個數值小於0或者不是一個整數,會拋出RangeError異常(如果確實需要將這個數值作為數組第1項,可以使用數組字面量),其它數實值型別的參數,則作為數組的第一項值處理,並且數值的長度值為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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.