全局屬性、全局方法javascript
原創文章,轉摘請註明出處:蘇福:http://www.cnblogs.com/susufufu/p/5853342.htmlhtml
首先普及幾個我總結的很是實用又很基礎的知識:(呵呵,僅僅是學習權威指南的筆記而已)java
typeof 返回的是字符串,有8種可能:"number"、"string"、"boolean"、"object"、"function"、"undefined"、"symbol"(ES6)、宿主對象類型git
假值:false、 null、 undefined、 0 、-0 、NaN、""github
真值:除了以上的值,其餘值均爲真值;web
對象:除了字符串字面量、數字字面量、true、false、null、undefined以外,其餘值都是對象!正則表達式
數字a 轉 字符串:json
字符串s 轉數字:轉換失敗返回NaN,忽略前置的空格,儘量多的轉換數字,忽略後面的非數字內容,其中'0X'、'0x'開頭的則把它當着16進制數來轉換瀏覽器
表示一個簡單的值的全局屬性:安全
一個數值,表示無窮大,有Infinity和-Infinity。
表示 Not-A-Number 的值。NaN 屬性的初始值就是 NaN,和 Number.NaN 的值同樣。
在JavaScript中,undefined這個詞有多重含義。undefined是全局對象的一個屬性
null 是一個javascript字面量,表示空值,它是javascript原始值之一。
null
表明的是空指針(大多數平臺下值爲0x00),所以,null
的類型標籤也成爲了0,typeof null
就錯誤的返回了"object".
null 與 undefined 的區別:null是字面量,undefined是全局對象的屬性
null與空對象{}的區別:我的理解爲null未被分配內存,而{}分配了內存,只是值爲空
var a = {};
var b = null;
a.name = 'realwall';
b.name = 'jim'; //這裏會報錯,b爲空指針對象,不能像普通對象同樣直接添加屬性。
執行特定功能並返回結果的全局方法:
eval(string )eval()是一個頂級函數而且跟任何對象無關。
eval()只能直接調用,不能夠間接調用,如使用變量來引用eval(),而後調用它。那麼可能會發生運行時錯誤
eval只是一個普通的函數,只不過他有一個快速通道通向編譯器,能夠將string變成可執行的代碼。當Function , setInterval 和 setTimeout這幾個方法接收一個字符串做爲參數時,內部調用了eval()方法
eval一般用在一些須要動態執行字符串,或將字符串轉爲javascript對象的場景,好比將json字符串轉爲javascript對象。
eval()函數並不會建立一個新的做用域,而且它的做用域就是它所在的做用域。能夠用window.eval()的方式來把它的做用域變爲全局(兼容IE8的對應方法爲window.execScript)
避免在沒必要要的狀況下使用eval:eval() 是一個危險的函數, 它能夠像擁有調用者的權力同樣調用代碼。若是你使用了字符串來運行eval(),那麼你的代碼可能被惡意方(不懷好意的人)影響, 經過在使用方的機器上使用惡意代碼,可能讓你失去在網頁或者擴展程序上的權限。eval() 可讀性差、不方便優化和調試、有性能消耗。在任何實用eval()的地方,基本均可以有通常的替代方案
它是全局方法,不與任何對象有關係。你能夠用這個方法來斷定一個數字是不是有限數字。isFinite 方法檢測它參數的數值。他會首先嚐試將參數轉換爲一個數值,若是參數是 NaN、Infinity、-Infinity,則返回false,其餘返回 true。
isNaN(testValue)用來判斷一個值是否爲 NaN。注:isNaN函數包含一些很是有意思的強制轉換規則;你也能夠經過 ECMAScript 6 中定義的 Number.isNaN() 或者 typeof 來判斷一個值是否爲非數值
將參數中指定的字符串解析成爲一個浮點數字並返回.parseFloat是個全局函數,不屬於任何對象.
該函數經過正則表達式的方式,在須要更嚴格地轉換float值時可能會有用: (只接受純數字值)
var filterFloat = function (value) { if(/^(\-|\+)?([0-9]+(\.[0-9]+)?|Infinity)$/.test(value)){ return Number(value); } return NaN; }
將給定的字符串以指定基數(radix/base)解析成爲整數。radix是一個2到36之間的整數值,用於指定轉換中採用的基數。好比參數"10"表示使用咱們一般使用的十進制數值系統。老是指定該參數能夠消除閱讀該代碼時的困惑而且保證轉換結果可預測。當忽略該參數時,不一樣的實現環境可能產生不一樣的結果。
parseInt("10546", 2); //2 parseInt("546", 2); //NaN parseInt("FXX123", 16); //15 parseInt("12",13); //15 parseInt(" -17", 8); //-15 parseInt("0x11", 16); //17 parseInt("0x11", 0); //17 parseInt("0x11"); //17
在沒有指定基數,或者基數爲 0 的狀況下,JavaScript 做以下處理:
一個更嚴格的方法來解析整型值:(任何不具備實際意義數字值的值均返回NaN)
filterInt = function (value) { if(/^(\-|\+)?([0-9]+|Infinity)$/.test(value)){ return Number(value); } return NaN; } filterInt('421op'); //NaN
對統一資源標識符(URI)進行編碼的方法。它使用1到4個轉義序列來表示每一個字符的UTF-8編碼(只有由兩個代理字符區組成的字符才用四個轉義字符編碼)。參數URI是一個完整的URI.
類型 |
包含 |
保留字符 |
; , / ? : @ & = + $ |
非轉義的字符 |
字母 數字 - _ . ! ~ * ' ( ) |
數字符號 |
# |
// 編碼高-低位完整字符 console.log(encodeURI('\uD800\uDFFF')); // 編碼單獨的高位字符拋出 "Uncaught URIError: URI malformed" console.log(encodeURI('\uD800')); // 編碼單獨的低位字符拋出 "Uncaught URIError: URI malformed" console.log(encodeURI('\uDFFF'));
function fixedEncodeURI (str) { return encodeURI(str).replace(/%5B/g, '[').replace(/%5D/g, ']'); }
是對統一資源標識符(URI)的組成部分進行編碼的方法。它使用一到四個轉義序列來表示字符串中的每一個字符的UTF-8編碼(只有由兩個Unicode代理區字符組成的字符才用四個轉義字符編碼)。參數str是String. URI 的組成部分。
爲了更嚴格的遵循 RFC 3986(它保留 !, ', (, ), 和 *),即便這些字符並無正式劃定 URI 的用途,下面這種方式是比較安全的:
function fixedEncodeURIComponent (str) { return encodeURIComponent(str).replace(/[!'()]/g, escape).replace(/\*/g, "%2A"); }
用於解碼由 encodeURI 方法或者其它相似方法編碼的統一資源標識符(URI)。將已編碼 URI 中全部能識別的轉義序列轉換成原字符,但不能解碼那些不會被 encodeURI 編碼的內容(例如 "#")
decodeURI("https://developer.mozilla.org/ru/docs/JavaScript_%D1%88%D0%B5%D0%BB%D0%BB%D1%8B");
// "https://developer.mozilla.org/ru/docs/JavaScript_шеллы"
用於解碼由 encodeURIComponent 方法或者其它相似方法編碼的部分統一資源標識符(URI)。參數encodedURI 是編碼後的部分 URI