[1]引用 [2]特性 [3]屬性 [4]方法
目錄
[1]引用 [2]特性 [3]屬性 [4]方法 編碼方法 eval() 數字方法前面的話
window對象是Web瀏覽器中javascript的一個終極兜底兒對象,在作用域中處於最末端,是一個包含所有對象的對象。所有在全局作用域中定義的屬性和函數都是window對象的屬性
var myStringVar = 'myString'; var myFunctionVar = function(){}; console.log('myStringVar' in window);//true console.log('myFunctionVar' in window);//true
引用
通常有兩種引用window對象的方法。第一種是簡單引用賦予window對象的名稱;第二種是在全局作用域中使用this關鍵字
var foo ='bar'; windowRef1 = window; windowRef2 = this; console.log(windowRef1,windowRef2);//輸出window對象的引用 console.log(windowRef1.foo,windowRef2.foo);//'bar' 'bar'
特性
window對象是隱式的,通常不顯式引用;即使window對象顯式聲明,它也是隱式的,因為window對象在作用域鏈中是最後一個
//window.alert()和alert()語句基本上是相同的 var foo = {//window對象在這裡是隱式的,window.foo fooMethod: function(){ alert('foo' + 'bar');//window對象在這裡是隱式的,window.alert window.alert('foo' + 'bar');//顯式調用window對象,效果一樣 } } foo.fooMethod();//window對象在這裡是隱式的,window.foo.fooMethod()
屬性
window對象共有18個屬性
undefined NaN Infinity
Boolean String Number Object Array Function Date RegExp
Error EvalError RangeError ReferenceError SyntaxError TypeError URIError
[註意]禁止給undefined、NaN和Infinity賦值
方法
Javascript附帶一些預定義函數,被認為是window對象的方法
編碼方法
encodeURI():對整個URI進行編碼,用特殊的UTF-8替換所有無效的字元
encodeURI()的不編碼字元有82個:
! # $ & ' ( ) * + , - . / : ; = ? @ _ ~ 0-9 a-z A-Z
encodeURIComponent():對URI的某一段進行編碼(常用於GET方法傳遞參數),用特殊的UTF-8替換所有無效的字元
一般來說,使用encodeURIComponent()比encodeURI()要多,因為在實踐中更常見的是查詢字元串參數而不是對基礎URI編碼。encodeURIComponent()的不編碼字元有71個:
! ' ( ) * - . _ ~ 0-9 a-z A-Z
escape():對字元串進行編碼,將字元的unicode編碼轉化為16進位序列
ES3中反對escape()的使用,並建議用encodeURI和encodeURIComponent代替,不過escape()依然被廣泛的用於cookie的編碼,因為escape()恰好編碼了cookie中的非法字元並且對路徑中常出現的“/”不進行編碼。escape()的不編碼字元有69個:
* + - . / @ _ 0-9 a-z A-Z
decodeURI():解碼encodeURI()
decodeURIComponent():解碼encodeURIComponent()
unescape():解碼escape()
var uri = "http://www.wrox.com/illegal value.htm#start"; console.log(encodeURI(uri));//http://www.wrox.com/illegal%20value.htm#start console.log(encodeURIComponent(uri));//http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.htm%23start console.log(escape(uri));//http%3A//www.wrox.com/illegal%20value.htm%23start var uri = 'http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.htm%23start'; console.log(decodeURI(uri));//http%3A%2F%2Fwww.wrox.com%2Fillegal value.htm%23start console.log(decodeURIComponent(uri));//http://www.wrox.com/illegal value.htm#start console.log(unescape(uri));//http://www.wrox.com/illegal value.htm#start
eval()
eval()方法像一個完整的ECMAScript解析器,只接受一個參數,即要執行的JavaScript字元串。當解析器發現代碼中調用eval()方法時,它會將傳入的參數當作實際的ECMAScript語句來解析,然後把執行結果插入到原位置。eval()方法能夠解釋字元串的能力非常強大,但也非常危險。當用它執行用戶輸入數據時,可能會有惡意用戶輸入威脅站點或應用程式字元的代碼,就是所謂的代碼註入
[註意]在嚴格模式下,外部訪問不到eval()中創建的任何變數或函數,為eval賦值也會導致錯誤
數字方法
Window對象下還有isFinite()、isNaN()、parseFloat()、parseInt()這四個關於數字的方法