91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

javascript標準庫(js的標準內置對象)總結

發布時間:2020-09-02 09:30:30 來源:腳本之家 閱讀:154 作者:mdxy-dxy 欄目:web開發

值屬性

這部分屬性只是簡單的值,它們沒有自己的屬性和方法。

Infinity

全局屬性 Infinity 是一個數值,表示無窮大。

NaN

全局屬性 NaN 的值表示不是一個數字(Not-A-Number)。

undefined

全局屬性undefined表示原始值undefined。它是一個JavaScript的 原始數據類型 。

null

值 null 特指對象的值未設置。它是 JavaScript 基本類型 之一。

函數屬性

全局函數可以直接調用,不需要在調用時指定所屬對象,執行結束后會將結果直接返回給調用者。

eval(str)

eval() 函數會將傳入的字符串當做 JavaScript 代碼進行執行。

PS:eval會造成安全和性能方面的問題,具體參見避免在不必要的情況下使用 eval。

isFinite(arg)

判斷被傳入的值(非number類型將轉換為number類型)是否為有限值。

isNaN()

判斷被傳入的值(非number類型將轉換為number類型)是否為NaN。

PS:使用Number.isNaN()來代替更有語義性。

parseFloat(str)

parseFloat() 函數解析一個字符串參數并返回一個浮點數。

PS:如果在解析過程中遇到了正負號(+或-),數字(0-9),小數點,或者科學記數法中的指數(e或E)以外的字符,則它會忽略該字符以及之后的所有字符,返回當前已經解析到的浮點數.同時參數字符串首位的空白符會被忽略.
如果第一個字符不能解析,直接返回NaN。

parseInt(str, radix);

parseInt() 函數解析一個字符串參數,并返回一個指定基數的整數 (數學系統的基礎)。

PS:radix一個介于2和36之間的整數,表示上述字符串的基數(默認為10)。

encodeURI(URI)

函數通過將特定字符的每個實例替換為一個、兩個、三或四轉義序列來對統一資源標識符 (URI) 進行編碼 (該字符的 UTF-8 編碼僅為四轉義序列)由兩個 “代理” 字符組成)。
PS:encodeURI 字母、數字、;、,、/、?、:、@、&、=、+、$、-、_、.、!、~、*、'、(、)、#、之外的所有字符。

decodeURI(encodeURI)

decodeURI() 函數解碼一個由encodeURI 先前創建的統一資源標識符(URI)或類似的例程。

encodeURIComponent(str)

encodeURIComponent()是對統一資源標識符(URI)的組成部分進行編碼的方法。

PS:encodeURIComponent 轉義除了字母、數字、(、)、.、!、~、*、'、-和_之外的所有字符。
為了避免服務器收到不可預知的請求,對任何用戶輸入的作為URI部分的內容你都需要用encodeURIComponent進行轉義。

decodeURIComponent(encodedURI)

decodeURIComponent() 方法用于解碼由 encodeURIComponent 方法或者其它類似方法編碼的部分統一資源標識符(URI)。

encodeURI和encodeURIComponent的區別與使用場景

區別在于編碼的字符范圍不同。

encodeURI使用于編碼整個URI而encodeURIComponent主要query部分(當你需要編碼URL中的參數)。
簡單明了區分escape、encodeURI和encodeURIComponent

Function

全局的Function對象沒有自己的屬性和方法, 但是, 因為它本身也是函數,所以它也會通過原型鏈從Function.prototype上繼承部分屬性和方法。

原型屬性

length

定義:指明函數的形參個數(確定多少個必須要傳入的參數)區別于arguments.length實參個數(確定函數被調用時的實際傳參個數)。

constructor

定義:返回創建實例對象的 Object 構造函數的引用。

原型方法

func.apply(thisArg, [argsArray])

定義:調用一個函數, 其具有一個指定的this值,以及作為一個數組(或類似數組的對象)提供的參數。
參數:thisArg為func函數執行時this的指向,argsArray為類數組參數數組。
返回:調用有指定this值和參數的函數的結果。

fun.call(thisArg, arg1, arg2, …)

定義:調用一個函數, 其具有一個指定的this值和分別地提供的參數(參數的列表)。
參數:thisArg為func函數執行時this的指向,arg1, arg2, …為指定的參數列表。
返回:返回值是你調用的方法的返回值,若該方法沒有返回值,則返回undefined。
運用:1.使用call方法調用父構造函數(在一個子構造函數中,你可以通過調用父構造函數的call方法來實現繼承)
2.使用call方法調用匿名函數3.使用call方法調用函數并且指定上下文的'this'
運用舉例

fun.bind(thisArg[, arg1[, arg2[, …]]])

定義:調用一個函數, 其具有一個指定的this值,以及作為一個數組(或類似數組的對象)提供的參數。
參數:thisArg為當綁定函數被調用時,該參數會作為原函數運行時的 this 指向,arg1、arg2…為當綁定函數被調用時,這些參數將置于實參之前傳遞給被綁定的方法。
返回:由指定的this值和初始化參數改造的原函數拷貝(返回一個函數)。
運用:1.創建綁定函數(顯式綁定this)2.偏函數(使一個函數擁有預設的初始參數)。
運用舉例

Function.prototype.toString()

定義:返回一個表示當前函數源代碼的字符串。
參數:null。
返回:表示函數源代碼的一個字符串。

Number

JavaScript 的 Number 對象是經過封裝的能讓你處理數字值的對象。
Number(),如果參數無法被轉換為數字,則返回 NaN。

屬性

Number.EPSILON

兩個可表示(representable)數之間的最小間隔,在進行計算時誤差在這個范圍內被認為是合理的。

Number.MAX_SAFE_INTEGER

JavaScript 中最大的安全整數 (2^53 - 1)。

Number.MIN_SAFE_INTEGER

JavaScript 中最小的安全整數 (-(2^53 - 1)).

Number.MAX_VALUE

能表示的最大正數。最小的負數是 -MAX_VALUE。

Number.MIN_VALUE

能表示的最小正數即最接近 0 的正數 (實際上不會變成 0)。最大的負數是 -MIN_VALUE。

Number.NaN

Not A Number.

Number.NEGATIVE_INFINITY

特殊的負無窮大值,在溢出時返回該值。

Number.POSITIVE_INFINITY

特殊的正無窮大值,在溢出時返回改值。

方法

下列方法均不會發生將String轉化為Number的過程。

Number.isNaN(value)

定義:確定傳遞的值是否為 NaN和其類型是 Number。它是用于代替原始的全局isNaN()。
參數:要被檢測是否是 NaN 的值。
返回:一個布爾值,表示給定的值是否是 NaN。
PS:該方法不同于全局的isNaN(),不會將字符串轉換為數字。

Number.isFinite(value)

定義:用來檢測傳入的參數是否是一個有窮數(finite number)。
參數:value要被檢測有窮性的值。
返回:一個布爾值表示給定的值是否是一個有窮數。
PS:和全局的 isFinite() 函數相比,這個方法不會強制將一個非數值的參數轉換成數值。

Number.isInteger(value)

定義:用來判斷給定的參數是否為整數。
參數:value要判斷此參數是否為整數。
返回:判斷給定值是否是整數的 Boolean 值。

Number.isSafeInteger(testValue)

定義:用來判斷傳入的參數值是否是一個“安全整數”(safe integer)。
參數:testValue需要檢測的參數。
返回:一個布爾值 表示給定的值是否是一個安全整數(safe integer)。

Number.parseFloat(string)

定義:可以把一個字符串解析成浮點數。
參數:string被解析的字符串。
返回:對應的浮點數。
PS:與全局函數 parseFloat()一樣。

Number.parseInt(string[, radix])

定義:可以根據給定的進制數的一個字符串數解析成整數。
參數:string要解析的值,radix一個介于2和36之間的整數(數學系統的基礎),表示上述字符串的基數。

實例方法

下列方法均返回為字符串。

numObj.toExponential([fractionDigits])

定義:以指數表示法返回該數值字符串表示形式。
參數:fractionDigits一個整數,用來指定小數點后有幾位數字。
返回:一個用冪的形式 (科學記數法) 來表示Number 對象的字符串。

numObj.toFixed(digits)

定義:使用定點表示法來格式化一個數。
參數:digits小數點后數字的個數。
返回:所給數值的定點數表示法的字符串形式。

numObj.toPrecision(precision)

定義:以指定的精度返回該數值對象的字符串表示。
參數:precision一個用來指定有效數個數的整數。
返回:以定點表示法或指數表示法表示的一個數值對象的字符串表示。

numObj.toLocaleString([locales [, options]])

定義:返回這個數字在特定語言環境下的表示字符串。
參數:locales為指定本地要使用的編號系統,options為有下列屬性(localeMatcher、style、currency等等但存在一定的兼容性)
返回:返回一個語言環境下的表示字符串。
PS:通常用于格式化為某種貨幣形式。

numObj.toString([radix])

定義:返回指定 Number 對象的字符串表示形式。
參數:radix指定要用于數字到字符串的轉換的基數(從2到36)。
返回:轉換后的字符串。

numObj.valueOf()

定義:返回一個被 Number 對象包裝的原始值。
返回:表示指定 Number 對象的原始值的數字。

String

靜態方法

String.fromCharCode(num1, …, numN)

定義:返回使用指定的Unicode值序列創建的字符串。

String.fromCodePoint(num1[, …[, numN]])

定義:返回使用指定的代碼點序列創建的字符串,但是這個方法不能識別 32 位的 UTF-16 字符(Unicode 編號大于0xFFFF)。

String.raw(callSite, …substitutions) || String.rawtemplateString

是用來獲取一個模板字符串的原始字面量值的。

實例屬性

length

返回:字符串的長度。

N

返回:第N個字符串,但不能更改。

實例方法

str.charAt(index)

定義:從一個字符串中返回指定index的字符,缺省參數為0。

str.charCodeAt(index)

定義:返回給定索引處字符的 UTF-16 代碼單元值的數字;如果索引超出范圍,則返回 NaN。

str.codePointAt(index)

定義:返回 一個 Unicode 編碼點值的非負整數。

str.concat(string2, string3[, …, stringN])

定義:將一個或多個字符串與原字符串連接合并,形成一個新的字符串并返回。

str.includes(searchString[, index])

定義:判斷一個字符串是否包含在另一個字符串中,根據情況返回true或false。

str.startsWith(searchString [, index])

定義:用來判斷當前字符串是否是以另外一個給定的子字符串“開頭”的,根據判斷結果返回 true 或 false。

str.endsWith(searchString [, index]);

定義:判斷當前字符串是否是以另外一個給定的子字符串“結尾”的,根據判斷結果返回 true 或 false。

str.indexOf(searchValue[, index])

定義:第一次出現的指定值的索引,開始在Index進行搜索,否則返回-1。

str.lastIndexOf(searchValue[, index])

定義:返回指定值在調用該方法的字符串中最后出現的位置,如果沒找到則返回 -1。

str.localeCompare(compareString[, locales[, options]])

定義:localeCompare() 方法返回一個數字來指示一個參考字符串是否在排序順序前面或之后或與給定字符串相同。

str.match(regexp);

定義:當一個字符串與一個正則表達式匹配時, match()方法檢索匹配項。

str.normalize([form]);

定義:會按照指定的一種 Unicode 正規形式將當前字符串正規化。

str.padStart(targetLength [, padString])

定義:會用一個字符串填充在當前字符串之前(如果需要的話則重復填充),返回填充后達到指定長度的字符串。

str.padEnd(targetLength [, padString])

定義:會用一個字符串填充在當前字符串之后(如果需要的話則重復填充),返回填充后達到指定長度的字符串。

str.repeat(count);

定義:返回一個新字符串,該字符串包含被連接在一起的指定數量的字符串的副本。
PS:參數從零開始。

str.replace(regexp|substr, newSubStr|function)

定義:返回一個由替換值替換一些或所有匹配的模式后的新字符串。
如果第一個參數為regexp第二個參數為function時,該函數參數說明
參數1:匹配模式的字符串。
參數2–:子表達是匹配的子字符串(就是捕獲分組)。
倒數參數2:聲明匹配在string中出現的位置。
倒數參數1:進行匹配的sting本身。

str.search(regexp)

定義:行正則表達式和 String對象之間的一個搜索匹配。
返回:如果匹配成功,則 search() 返回正則表達式在字符串中首次匹配項的索引。否則,返回 -1。

str.slice(beginSlice[, endSlice])

定義:提取一個字符串的一部分,并返回一新的字符串。
參數:beginSlice從該索引(以 0 為基數)處開始提取原字符串中的字符。如果值為負數,會被當做 sourceLength + beginSlice 看待,這里的sourceLength 是字符串的長度。
endSlice在該索引(以 0 為基數)處結束提取字符串,同樣可為負數。

str.split([separator[, limit]])

定義:使用指定的分隔符字符串將一個String對象分割成字符串數組,以將字符串分隔為子字符串,以確定每個拆分的位置。

str.substr(start[, length])

定義:返回一個字符串中從指定位置開始到指定字符數的字符。
PS:start >=str.length 或 length <= 0 返回空字符串;start < 0 則轉換為start + str.length。

str.substring(indexStart[, indexEnd])

定義:返回一個字符串在開始索引到結束索引之間的一個子集, 或從開始索引直到字符串的末尾的一個子集。
PS:一些特殊情況。
如果 indexStart 等于 indexEnd,substring 返回一個空字符串。
如果省略 indexEnd,substring 提取字符一直到字符串末尾。
如果任一參數小于 0 或為 NaN,則被當作 0。
如果任一參數大于 stringName.length,則被當作 stringName.length。
如果 indexStart 大于 indexEnd,則 substring 的執行效果就像兩個參數調換了一樣。

str.toLowerCase()

定義:將調用該方法的字符串值轉為小寫形式,并返回新字符串。

str.toUpperCase()

定義:將調用該方法的字符串值轉換為大寫形式,并返回新字符串。

str.toLocaleLowerCase()

定義:根據任何特定于語言環境的案例映射,返回調用字符串值轉換為小寫的值。
PS:在大多數情況下,該方法產生的結果和調用toLowerCase()的結果相同(除土耳其等)。

str.toLocaleUpperCase()

定義:使用本地化(locale-specific)的大小寫映射規則將輸入的字符串轉化成大寫形式并返回結果字符串。

str.toString()

定義:返回指定對象的字符串形式。

str.trim()

定義:會從一個字符串的兩端刪除空白字符,返回一個新的字符串。
PS:str.trimLeft() 和 str.trimRight() 不是標準方法。

string[Symbol.iterator]

返回一個新的Iterator對象,它遍歷字符串的代碼點,返回每一個代碼點的字符串值。
PS:下列內置類型擁有默認迭代器行為Array、String、Set、Map等,而Object沒有。

Array

靜態方法

在 ES2015 中, Class 語法允許我們為內置類型(比如 Array)和自定義類新建子類(比如叫 SubArray)。這些子類也會繼承父類的靜態方法,比如 SubArray.from(),調用該方法后會返回子類 SubArray 的一個實例,而不是 Array 的實例。

Array.from(arrayLike[, mapFn[, thisArg]])

定義:從一個類似數組或可迭代對象中創建一個新的數組實例。
參數:
arrayLike想要轉換成數組的偽數組對象或可迭代對象。
mapFn (可選參數)如果指定了該參數,新數組中的每個元素會執行該回調函數。
thisArg (可選參數)可選參數,執行回調函數 mapFn 時 this 對象。
返回:一個新的數組。
PS:Array.from(obj, mapFn, thisArg) 就相當于 Array.from(obj).map(mapFn, thisArg),ES6之前的做法:Array.prototype.slice.call(arrayLike)。

Array.isArray(obj)

定義:確定傳遞的值是否是一個 Array。
返回:boolean。
PS:ES6之前的做法Object.prototype.toString.call(arg) === ‘[object Array]'。

Array.of(element0[, element1[, …[, elementN]]])

定義:創建一個具有可變數量參數的新數組實例,而不考慮參數的數量或類型。
參數:任意個參數,將按順序成為返回數組中的元素。
返回:參數列表組成的數組。
PS:Array.of() 和 Array 構造函數之間的區別在于處理整數參數:Array.of(7) 創建一個具有單個元素 7 的數組,而 Array(7) 創建一個包含 7 個 undefined 元素的數組。

實例方法及屬性

ary.length

返回:讀寫數組的長度。

修改器方法(改變原數組)

arr.copyWithin(target[, start[, end]])

定義:淺復制數組的一部分到同一數組中的另一個位置,并返回它,而不修改其大小。
參數:
target 0 為基底的索引,復制序列到該位置。如果是負數,target 將從末尾開始計算。如果 target 大于等于 arr.length,將會不發生拷貝。如果 target 在 start 之后,復制的序列將被修改以符合 arr.length。
start 0 為基底的索引,開始復制元素的起始位置。如果是負數,start 將從末尾開始計算。如果 start 被忽略,copyWithin 將會從0開始復制。
end 0 為基底的索引,開始復制元素的結束位置。copyWithin 將會拷貝到該位置,但不包括 end 這個位置的元素。如果是負數, end 將從末尾開始計算。如果 end 被忽略,copyWithin 將會復制到 arr.length。
返回值:操作原數組。

arr.fill(value[, start[, end]])

定義:用一個固定值填充一個數組中從起始索引到終止索引內的全部元素。
參數:
value 用來填充數組元素的值。
start 開始索引,默認為0。
end 結束索引,默認為arr.length(不包括)。
返回:修改后的數組。

arr.push(element1, …, elementN)

定義:將一個或多個元素添加到數組的末尾,并返回新數組的長度。
參數:
elementN 被添加到數組末尾的元素。
返回:操作后的數組的長度。

arr.pop()

定義:從數組中刪除最后一個元素,并返回該元素的值。此方法更改數組的長度。
返回:從數組中刪除的元素(當數組為空時返回undefined)。

arr.reverse()

定義:將數組中元素的位置顛倒。
返回:顛倒數組中元素的位置,并返回該數組的引用。

arr.sort(compareFunction)

定義:可以根據指定方法對數組進行排序。
compareFunction 可選。用來指定按某種順序進行排列的函數。如果省略,元素按照轉換為的字符串的各個字符的Unicode位點進行排序。
返回:返回排序后的數組。原數組已經被排序后的數組代替。

arr.shift()

定義:從數組中刪除第一個元素,并返回該元素的值。此方法更改數組的長度。
返回:從數組中刪除的元素; 如果數組為空則返回undefined。

arr.unshift(element1, …, elementN)

定義:將一個或多個元素添加到數組的開頭,并返回新數組的長度。
參數:element1, …, elementN 要添加到數組開頭的元素。
返回:當一個對象調用該方法時,返回其 length 屬性值。

array.splice(start, [deleteCount], [item1], [item2], …)

定義:通過刪除現有元素和/或添加新元素來更改一個數組的內容。
參數:
start 開始修改的位置。
deleteCount 移除數組元素的個數。
item1、item2…為添加的元素。
返回:由被刪除的元素組成的一個數組。如果只刪除了一個元素,則返回只包含一個元素的數組。如果沒有刪除元素,則返回空數組。

訪問方法(不直接操作原理的數組)

old_array.concat(value1[, value2[, …[, valueN]]])

定義:用于合并兩個或多個數組。此方法不會更改現有數組,而是返回一個新數組。
參數:valueN 將數組和/或值連接成新數組。
返回:新數組。

arr.includes(searchElement, [fromIndex])

定義:用來判斷一個數組是否包含一個指定的值,根據情況,如果包含則返回 true,否則返回false。
參數:
searchElement 需要查找的元素值。
fromIndex 從該索引處開始查找 searchElement。
返回:boolean。

arr.join([separator])

定義:將一個數組(或一個類數組對象)的所有元素連接成一個字符串并返回這個字符串。
參數:
searchElement 需要查找的元素值。
fromIndex 從該索引處開始查找 searchElement。
返回:string。

arr.slice([begin], [end])

定義:返回一個從開始到結束(不包括結束)選擇的數組的一部分淺拷貝到一個新數組對象。
返回:一個含有提取元素的新數組。

arr.indexOf(searchElement[, fromIndex = 0])

定義:返回在數組中可以找到一個給定元素的第一個索引,如果不存在,則返回-1。
返回:首個被找到的元素在數組中的索引位置; 若沒有找到則返回 -1。

arr.lastIndexOf(searchElement[, fromIndex = arr.length - 1])

定義:返回在數組中可以找到一個給定元素的第一個索引,如果不存在,則返回-1。
返回:數組中最后一個元素的索引,如未找到返回-1。

arr.toString()

定義:返回一個字符串,表示指定的數組及其元素。
返回:逗號分隔的字符串。

迭代方法

array.forEach(callback(currentValue, index, array){ //do something}, this)

定義:對數組的每個元素執行一次提供的函數。
返回:undefined。
PS:沒有辦法中止或者跳出 forEach 循環,需要跳出請使用循環代替。
已刪除(使用delete方法等情況)或者未初始化的項將被跳過(但不會跳過那些值為 undefined、null 的項)。

array.map(callback(currentValue, index, array){ //do something}, this)

定義:創建一個新數組,其結果是該數組中的每個元素都調用一個提供的函數后返回的結果。
返回:一個新數組,每個元素都是回調函數的結果。

arr.keys()

定義:返回一個新的Array迭代器,它包含數組中每個索引的鍵。
返回:一個新的 Array 迭代器對象。

arr.values()

定義:返回一個新的 Array Iterator 對象,該對象包含數組每個索引的值。
返回:一個新的 Array 迭代器對象。

arr.entries()

定義:返回一個新的Array Iterator對象,該對象包含數組中每個索引的鍵/值對。
返回:一個新的 Array 迭代器對象。

arr.every(callback[, thisArg])

定義:測試數組的所有元素是否都通過了指定函數的測試。
返回:boolean。

arr.some(callback[, thisArg])

定義:測試數組中的某些元素是否通過由提供的函數實現的測試。
返回:boolean。

arr.filter(callback[, thisArg])

定義:創建一個新數組, 其包含通過所提供函數實現的測試的所有元素。
返回:新數組。

arr.findIndex(callback[, thisArg])

定義:返回數組中滿足提供的測試函數的第一個元素的索引。否則返回-1。
返回:當某個元素通過 callback 的測試時,返回數組中的一個值的索引,否則返回 -1。

arr.find(callback[, thisArg])

定義:返回數組中滿足提供的測試函數的第一個元素的值。否則返回 undefined。
返回:當某個元素通過 callback 的測試時,返回數組中的一個值,否則返回 undefined。

arr.reduce(callback[, initialValue])

定義:對累加器和數組中的每個元素(從左到右)應用一個函數,將其減少為單個值。
參數:
callback 執行數組中每個值的函數,包含四個參數:
accumulato 累加器累加回調的返回值; 它是上一次調用回調時返回的累積值,或initialValue(如下所示)。
currentValue 數組中正在處理的元素。
currentIndex可選 數組中正在處理的當前元素的索引。 如果提供了initialValue,則索引號為0,否則為索引為1。
array可選 調用reduce的數組。
initialValue 可選用作第一個調用 callback的第一個參數的值。 如果沒有提供初始值,則將使用數組中的第一個元素。 在沒有初始值的空數組上調用 reduce 將報錯。
返回:函數累計處理的結果。

arr.reduceRight(callback[, initialValue])

定義:接受一個函數作為累加器(accumulator)和數組的每個值(從右到左)將其減少為單個值。

arrSymbol.iterator

定義:默認為數組不說了迭代器,@@iterator 屬性和 values() 屬性的初始值均為同一個函數對象。
返回:數組的 iterator 方法,默認情況下與 values() 返回值相同。

arr.flatten(depth)

定義:會遞歸到指定深度將所有子數組連接,并返回一個新數組。
參數:depth 可選指定嵌套數組中的結構深度,默認值為1。
返回:一個將子數組連接的新數組。

arr.flatMap(function callback(currentValue[, index[, array]]) { // 返回新數組的元素}[, thisArg])

定義:首先使用映射函數映射每個元素,然后將結果壓縮成一個新數組。它與 map 和 深度值1的 flatten 幾乎相同,但flatMap通常在合并成一種方法的效率稍微高一些。
返回:一個新的數組,其中每個元素都是回調函數的結果,并且結構深度 depth 值為1。

Proxy && Reflect

Proxy是一個構造函數(對對象的訪問進行攔截),Reflect(操作對象提供的API)。
Reflect它與Proxy對象的方法是一一對應的,這就讓Proxy對象可以方便地調用對應的Reflect方法,完成默認行為,作為修改行為的基礎。

Proxy

Proxy 用于修改某些操作的默認行為,等同于在語言層面做出修改,所以屬于一種“元編程”(meta programming),即對編程語言進行編程。
Proxy 可以理解成,在目標對象之前架設一層“攔截”,外界對該對象的訪問,都必須先通過這層攔截,因此提供了一種機制,可以對外界的訪問進行過濾和改寫。

Proxy方法:target參數表示所要攔截的目標對象,handler參數也是一個對象,用來定制攔截行為
var proxy = new Proxy(target, handler);
var person = {
 name: "張三"
};
var proxy = new Proxy(person, {
 get: function(target, property) {
  if (property in target) {
   return target[property];
  } else {
   throw new ReferenceError("Property \"" + property + "\" does not exist.");
  }
 }
});
proxy.name // "張三"
proxy.age // 拋出一個錯誤

Proxy使用詳解

Reflect

將Object對象的一些明顯屬于語言內部的方法(比如Object.defineProperty),放到Reflect對象上。現階段,某些方法同時在Object和Reflect對象上部署,未來的新方法將只部署在Reflect對象上。也就是說,從Reflect對象上可以拿到語言內部的方法。
// 下列方法說明:target為目標對象,name為某個屬性,receiver為如果name屬性設置了賦值函數,則為函數的this指向
Reflect.apply(target, thisArg, args)
Reflect.apply方法等同于Function.prototype.apply.call(func, thisArg, args),用于綁定this對象后執行給定函數。
Reflect.construct(target, args)
Reflect.construct方法等同于new target(…args),這提供了一種不使用new,來調用構造函數的方法。
Reflect.get(target, name, receiver)
Reflect.get方法查找并返回target對象的name屬性,如果沒有該屬性,則返回undefined。
Reflect.set(target, name, value, receiver)
Reflect.set方法設置target對象的name屬性等于value。
Reflect.defineProperty(target, name, desc)
Reflect.defineProperty方法基本等同于Object.defineProperty,用來為對象定義屬性。未來,后者會被逐漸廢除,請從現在開始就使用Reflect.defineProperty代替它。
Reflect.deleteProperty(target, name)
Reflect.deleteProperty方法等同于delete obj[name],用于刪除對象的屬性。
Reflect.has(target, name)
Reflect.has方法對應name in obj里面的in運算符。
Reflect.ownKeys(target)
Reflect.ownKeys方法用于返回對象的所有屬性,基本等同于Object.getOwnPropertyNames與Object.getOwnPropertySymbols之和。
Reflect.isExtensible(target)
Reflect.isExtensible方法對應Object.isExtensible,返回一個布爾值,表示當前對象是否可擴展。
Reflect.preventExtensions(target)
Reflect.preventExtensions對應Object.preventExtensions方法,用于讓一個對象變為不可擴展。它返回一個布爾值,表示是否操作成功。
Reflect.getOwnPropertyDescriptor(target, name)
Reflect.getOwnPropertyDescriptor基本等同于Object.getOwnPropertyDescriptor,用于得到指定屬性的描述對象,將來會替代掉后者。
Reflect.getPrototypeOf(target)
Reflect.getPrototypeOf方法用于讀取對象的proto屬性,對應Object.getPrototypeOf(obj)。
Reflect.setPrototypeOf(target, prototype)
Reflect.setPrototypeOf方法用于設置對象的proto屬性,返回第一個參數對象,對應Object.setPrototypeOf(obj, newProto)。

Event

Event接口表示在DOM中發生的任何事件; 一些是用戶生成的(例如鼠標或鍵盤事件),而其他由API生成(例如指示動畫已經完成運行的事件,視頻已被暫停等等)。有許多類型的事件,其中一些使用基于主要事件接口的其他接口。事件本身包含所有事件通用的屬性和方法。

屬性

bubbles(只讀)

定義:用來表示該事件是否在DOM中冒泡的boolean值。

cancelBubble(廢棄)

定義:獲取或設置當前事件是否要取消冒泡(使用e.stopPropagation()代替)。

cancelable(只讀)

定義:表示這個事件是否可以取消默認行為(阻止默認行為e.preventDefault())。

composed(只讀)

定義:表示該事件是否可以Shadow DOM 傳遞到一般的 DOM。

currentTarget(只讀)

定義:當前注冊事件的對象的引用,這個值會在傳遞途中發生變化。

deepPath

定義:返回事件冒泡過程所有經過的節點所構成的Array數組。

defaultPrevented(只讀)

定義:返回是否已經調用了e.preventDefault()來阻止默認行為。

eventPhase(只讀)

定義:返回事件流正在哪個階段。

returnValue(廢棄)

定義:獲取或設置事件的默認操作是否已被阻止。

target(只讀)

定義:返回一個觸發事件的對象的引用(ie的srcElement)。

timeStamp(只讀)

定義:事件創建時的時間戳,毫秒級別。

type(只讀)

定義:返回一個字符串(不區分大小寫), 表示該事件對象的事件類型。

isTrusted(只讀)

定義:指明事件是否是由瀏覽器(當用戶點擊實例后)或者由腳本(使用事件的創建方法,例如event.initEvent)啟動。

target與currentTarget的區別

event.target返回觸發事件的元素
event.currentTarget返回綁定事件的元素
event對象中 target和currentTarget 屬性的區別

方法

document.createEvent(“UIEvents”)

創建一個新的事件(Event),隨之必須調用自身的 init 方法進行初始化。

event.initEvent(type, bubbles, cancelable)

定義:Event.initEvent() 方法可以用來初始化由Document.createEvent() 創建的 event 實例,且在觸發之前event.dispatchEvent()。

event.preventDefault()

定義:如果此事件沒有需要顯式處理,那么它默認的動作也不要做(因為默認是要做的)。

event.stopPropagation()

定義:阻止捕獲和冒泡階段中當前事件的進一步傳播(只阻止當前偵聽器)。

event.stopImmediatePropagation()

定義:阻止調用相同事件的其他偵聽器。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

东乌| 无锡市| 鄂州市| 肥城市| 新野县| 同江市| 奈曼旗| 城步| 普定县| 余干县| 沧源| 新乡市| 社会| 江永县| 怀柔区| 咸宁市| 彭阳县| 二连浩特市| 通海县| 林口县| 高唐县| 上高县| 万盛区| 武胜县| 会理县| 志丹县| 乐山市| 安乡县| 沂源县| 东辽县| 庐江县| 富锦市| 怀宁县| 六枝特区| 博白县| 成武县| 木兰县| 西宁市| 察哈| 资溪县| 仲巴县|