var num1=parseInt("10",2); //2 (按二進制解析)
var num2=parseInt("10",8); //8 (按八進制解析)
var num3=parseInt("10",10); //10 (按十進制解析)
var num4=parseInt("10",16); //16 (按十六進制解析)
四.String
數值,布爾值,對象和字符串值(每一個字符串也都有一個toString()方法,該方法返回值返回串的一個副本)都有toString()方法。但null和undefined值沒有這個方法。
多數狀況下,調用toString方法沒必要傳遞參數。可是,在調用數值的toString()方法時,能夠傳遞一個參數:輸出數值的基數。默認狀況下,toString()方法以十進制格式返回數值的字符串表示。而經過傳遞基數,toString()輸出以二進制、八進制、十六進制,乃至其餘任意有效進制格式表示的字符串值。下面給出幾個例子:
var num=10;
alert(num.toString()); //"10"
alert(num.toString(2)); //"1010"
alert(num.toString(8)); //"12"
alert(num.toString(10)); //"10"
alert(num.toString(16)); //"a"
若是值有toString()方法,則調用該方法(沒有參數)並返回相應的結果;
若是值是null,則返回"null";
若是值是undefined,則返回「undefined」
下面再看幾個例子:
var value1=10;
var value2=true;
var value3=null;
alert(String(value1)); //"10"
alert(String(value2)); //"true"
alert(String(value3)); //"null"
alert(String(value4)); //"undefined"
這裏前後轉換了4個值:數值、布爾值、null和undefined。數值和布爾值的轉換結果與調用toString()方法獲得的結果相同。由於null和undefined沒有toString()方法,因此String()函數就返回了這兩個值的字面量。
五.Object
ECMAScript中的對象是可變的鍵控集合(即一組數據和功能的集合)。它將不少值聚合在一塊兒,可經過名字訪問這些值。對象也可看作屬性的容器,每一個屬性都是一個名/值對。屬性的名字能夠是包括空字符串在內的任意字符串。屬性值能夠是除undefined值以外的任何值。對象最多見的用法是建立(create)、設置(set)、查找(query)、刪除(delete)、檢測(test)和枚舉(enumerate)他的屬性。
1、屬性類型
ECMA-262第5版在定義只有內部採用的特性時,描述了屬性的各類特徵。爲了表示特性時內部值,該規範把它們放在了兩對方括號中,例如:[[Enumerable]]。ECMAScript對象中有兩種屬性:數據屬性和訪問器屬性。
1.數據屬性
數據屬性包含一個數據值的位置。在這個位置能夠讀取和寫入值。數據屬性有4個描述其行爲的特性。
a.[[Configurable]]:表示可否經過delete刪除屬性從而從新定義屬性,可否修改屬性的特性,或者可否把屬性修改成訪問器屬性。這個特性默認值爲true。
b.[[Enumerable]]:表示可否經過for-in循環返回屬性。這個特性默認值爲true。
c.[[Writable]]:表示可否修改屬性的值。這個特性默認值爲true。
d.[[Value]]:包含這個屬性的數據值。讀取屬性值的時候,從這個位置讀;寫入屬性值的時候,把新值保存在這個位置。這個特性的默認值爲undefined。
2.訪問器屬性:
a.[[Configurable]]:表示可否經過delete刪除屬性從而從新定義屬性,可否修改屬性的特性,或者可否把屬性修改成數據屬性。對於直接在對象上定義的屬性,這個特性的默認值爲true.
b.[[Enumerable]]:表示可否經過for-in循環返回屬性。對於直接在對象上定義的屬性,這個特性的默認值爲true。
c.[[Get]]:在讀取屬性時調用的函數。默認值爲undefined。
d.[[Set]]:在寫入屬性時調用的函數。默認值爲undefined。
2、建立對象
1.經過new建立對象
new 運算符建立並初始化一個新對象。關鍵字new後跟隨一個函數調用。這裏的函數稱作構造函數,構造函數用以初始化一個新建立的對象。JavaScript語言核心中的原始類型都包含內置構造函數。例如:
除了這些內置構造函數,用自定義構造函數來初始化新對象也是很是常見的。
2.對象字面量
建立對象最簡單的方式就是在JavaScript代碼中使用對象字面量。對象字面量是由若干名/值對組成的映射表,名/值對中間用冒號分隔,名/值對之間用逗號分隔,整個映射表用花括號括起來,結構爲:{屬性名1:屬性值1,屬性名2:屬性值2,……}。屬性名能夠是JavaScript標識符也能夠是字符串字面量(包括空字符串)。屬性的值能夠是任意類型的JavaScript表達式,表達式的值(能夠是原始值也能夠是對象值)就是這個屬性的值。請看示例:
3.原型
咱們建立的每一個對象都有一個prototype(原型)屬性,這個屬性是一個指針,指向一個對象,而這個對象的用途是包含能夠由特定類型的全部實例共享的屬性和方法。若是按照字面意思來理解,那麼prototype就是經過調用構造函數而建立的那個對象實例的原型對象。使用原型對象的好處是可讓全部對象實例共享它所包含的屬性和方法。換句話說,沒必要在構造函數中定義對象實例的信息,而是能夠將這些信息直接添加到原型對象中,請看示例:
在此,咱們將sayName()方法和全部屬性直接添加到了Person的prototype屬性中,構造函數變成了空函數。即便如此,也仍然能夠經過調用構造函數來建立新對象,並且新對象還會具備相同的屬性和方法。但與構造函數不一樣的是,
3、基於對象屬性的各類操做
1.對象屬性的獲取
訪問對象屬性可使用點表示法和方括號表示法。對於點(.)來講,右側必須是一個以屬性名稱命名的簡單標識符。對於方括號來講([]),方括號內必須是一個計算結果爲字符串的表達式,這個字符串就是屬性的名字。請看示例:
當使用方括號時,咱們說方括號內的表達式必須返回字符串。其實更嚴謹的說,表達式必須返回字符串或返回一個能夠轉換爲字符串的值(這個特色能夠用於處理不少狀況)。由此咱們能夠聯想到數組,這和數組獲取元素的方法極爲類似,其實數組也是對象,只是其屬性名爲數組下標而已。
2.屬性訪問錯誤
可是若是對象不存在,那麼試圖查詢這個不存在的對象的屬性就會報錯。null和undefined值都沒有屬性,所以查詢這些值的屬性會報錯,請看示例:
固然,給null和undefined設置屬性也會報類型錯誤。給其餘值設置屬性也不老是成功,有一些屬性時只讀的,不能從新複製,有一些對象不容許新增屬性,但讓人頗感意外的是,這些設置屬性的失敗操做不會報錯:
這是一個歷史遺留問題,這個bug在ECMAScript5的嚴格模式中已經修復。在嚴格模式中,任何失敗的屬性設置操做都會拋出一個類型錯誤異常。
3.刪除屬性
delete運算符能夠刪除對象的屬性。它的操做數應當是一個屬性訪問表達式。讓人感到意外的是,delete只是斷開屬性和宿主對象的聯繫,而不會去操做屬性中的屬性。
delete運算符只能刪除自有屬性,不能刪除繼承屬性(要刪除繼承屬性必須從定義這個屬性的原型對象上刪除它,並且這會影響到全部繼承自這個原型的對象)
當delete表達式刪除成功或沒有任何反作用(好比刪除不存在的屬性)時,它返回true。若是delete後不是一個屬性訪問表達式,delete一樣返回true:
delete不能刪除那些可配置性爲false的屬性(儘管能夠刪除不可擴展的可配置屬性)。某些內置對象的屬性是不可配置的,好比經過變量聲明和函數聲明建立的全局對象的屬性。在嚴格模式中,刪除一個不可配置屬性會報一個類型錯誤。在非嚴格模式中,這些狀況下的delete操做會返回false:
在非嚴格模式中刪除全局對象的可配置屬性時,能夠省略對全局對象的引用,直接在delete操做符後跟隨要刪除的屬性名便可:
而後再嚴格模式中,delete後跟隨一個非法的操做數(好比x),則會報一個語法錯誤,所以必須顯式指定對象及其屬性:
4.枚舉屬性
for-in語句可用來遍歷一個對象中的全部屬性名。該枚舉過程將會列出全部的屬性——包括函數和你可能不關心的原型中的屬性——因此有必要過濾掉那些你不想要的值。最爲經常使用的過濾器是hasOwnProperty方法,以及使用typeof來排除函數:
屬性名出現得順序是不肯定的,所以要對任何可能出現的順序有所準備。若是你想要確保屬性以特定的順序出現,最好的辦法就是徹底避免使用for-in語句,而是建立一個數組,在其中以正確的順序包含屬性名:
經過使用for而不是for-in ,能夠獲得咱們想要的屬性,而不用擔憂可能發掘出原型鏈中的屬性,而且咱們按正確的順序得到了它們的值
隱式類型轉化: a.除了+號以外(- * / )的都是隱式類型轉化; b.== var a = '12'; var b = 12; alert(a == b);//true; +的做用: a>.字符串拼接: b>.還能夠作計算; 顯式類型轉化[強制類型轉化]: a.parseInt(n,index);//取整數;碰到不是數字的就不在日後看了;index指進制數,默認十進制; var a = '12asd353453'; var c = parseInt(a,10); alert(c);//12; var num = 123; alert(parseInt(num/60) + '分' + num%60 + '秒'); b.parseFloat(n,index);//取小數,碰到不是數字的就不在繼續轉化; c.Number(); 字符串裏面包含非數字的就轉化不了(NaN); var str = '12asd43543'; var num = Number(str); alert(num);//NaN =: 賦值:右邊的賦值給左邊的; ==: 比較: 會作隱式類型轉換,若是數據類型不相等,會先轉換數據類型以後在進行比較; ===:嚴格的比較,若是數據類型不相等,那麼就不相等;