單體內建物件 單體內建物件

2021-10-14 08:33:40 字數 2656 閱讀 3809

ecmascript-262對內建物件的定義是:「由ecmascript實現提供的,不依賴於宿主環境的物件,這些物件在ecmascript程式執行之前就已經存在了。」意思就是說,開發人員不必顯示地例項化內建物件,因為它們已經例項化了。如object,array,string。ecmascript還定義了兩個單體內建物件:global 和 math

global 物件

global(全域性)物件可以說是ecmascript中最特別的乙個物件了,因為不管你從什麼角度上看,這個物件都是不存在的。ecmascript中的global物件在某種意義上來說是作為乙個終極的「兜底兒物件」來定義的。換句話來說,不屬於任何其他物件的屬性和方法,最終都是它的屬性和方法。事實上,沒有全域性變數或全域性函式;所有在全域性作用域中定義的屬性和函式,都是global物件的屬性。諸如isnan(),isfinite(),parserint()以及parsefloat(),實際上都是global物件的方法。除此之外,global物件還包含其他一些方法:

uri編碼方法:

encodeuri():可以對uri(uniform resource identifiers,通用資源識別符號)進行編碼,以便傳送給給瀏覽器。有效的uri中不能包含某些字元,例如空格。而這個uri編碼方法就可以對uri進行編碼,它們用特殊的utf-8編碼替換所有無效的字元,從而讓瀏覽器能夠接受和理解。

encodeuri主要用於整個uri(例如, value.htm)

encodeuricomponent():主要用於uri中的某一段(例如:前面uri中的illegal value.htm)進行編碼。

它們的主要區別在於,encodeuri不會對本身屬於uri的特殊字元進行編碼,例如冒號,正斜槓,問號和井字型大小;而encodeuricomponent()則會對它發現的任何非標準字元進行編碼。

encodeuri和encodeuricomponent效果

一般來說,我們使用encodeuricomponent()方法要比使用encodeuri多,因為在事件中更常見的是對查詢字串引數而不是對基礎uri進行編碼

與encodeuri()和encodeuricompnent()方法相對應的兩個方法分別是decodeuri()和decodeuricomponent()。其中decodeuri只能對使用encodeuri()替換的字元進行解碼。例如,它可以將%20替換成乙個空格,但不會對%23作任何處理,因為%23表示井字型大小(#),而井字型大小不是使用encodeuri編碼的

decodeuri,decodeuricomponent效果

eval()方法:

大概也是整個ecmascript語言中最強大的乙個方法。eval()方法就像是乙個完整的ecmascript解析器,它只接受乙個引數,既要執行的ecmascript字串。

當解析其發現海馬中呼叫eval()方法時,它會將傳入的引數當作實際的ecmascript語句來解析,然後把執行結果插入到原位置。通過eval()執行的**被認為是包含該次呼叫的執行環境的一部分,因此被執行的**具有與該執行環境相同的作用域鏈。這意味著通過eval()執行的**可以引用在包含環境中定義的變數。

eval()效果

其中,函式sayhi勢在eval()內部定義的,但由於對eval()的呼叫最終會被替換成定義函式的實際**,因此可以在下一行呼叫sayhi()。對於變數也一樣

在eval()中建立的任何變數或函式都不會被提公升,因為在解析**的時候,它們被包含在乙個字串中;它們只在eval()執行的時候建立。

eval()定義的變數不會被提公升

其中,若是將message的定義換成eval()來定義,則會報出錯誤:uncaught referenceerror: message is not defined

在嚴格模式下,在外部訪問不到eval中建立的任何變數或函式。

能夠解釋**字串的能立非常強大,但也非常危險。因此在使用eval()時必須幾位謹慎,特別勢在用它執行使用者輸入資料的情況下。否則,可能會有惡意使用者輸入威脅你的站點或應用程式安全的**(即所謂的**注入)

global物件屬性:

undefined

naninfinity

object

array

function

boolean

string

number

date

regexp

error

evalerror

rangeerror

referenceerror

syntaxerror

typeerror

urierror

windows 物件

ecmascript 雖然沒有指出如何直接訪問global物件,但web瀏覽器都是將這個全域性物件作為window物件的一部分加以實現的。因此在全域性作用域中宣告的所有變數和函式,就都成為了window物件的屬性。

另一種取得global物件的方法是:

var global = function()()

單體內建物件 單體內建物件

1 global物件 所有全域性作用域定義的屬性與函式,都是global物件的屬性。1.1 uri編碼方法 encodeuri 不會對本身屬於uri的特殊符號進行編碼。uri解碼方法 decodeuri 只能對使用encodeuri 替換的字元進行解碼 decodeuricomponent 能夠解碼...

單體內建物件 單體內建物件

內建物件 由ecmascript實現提供的,不依賴宿主環境的物件,這些物件再es程式執行之前就已經存在 global物件 global全域性物件是乙個特別的物件 兜底物件 不屬於其他物件的屬性和方法,都屬於global物件。如 isnan isfinite parseint parsefloat 註...

單體內建物件 單體內建物件 Global物件

單體內建物件的定義 由ecmascript實現提供的 不依賴於宿主環境的物件,這些物件在ecmascript程式執行之前已經存在了。意思就是說 開發人員不必顯式地例項化內建物件,因為他們已經例項化了。單體內建物件包括 object array string global math.global物件 ...