ECMAScript 基礎(chǔ)知識(shí)
更新時(shí)間:2007年06月29日 00:00:00 作者:
JavaScript的核心之一ECMAScript的語(yǔ)言特性和Java、C、Perl都有許多相似之處,其中不少特性都是從這些語(yǔ)言借鑒而來(lái),同時(shí)它們之間也存在許多差異。下面列舉一些ECMAScript的基本特性。
--和Java一樣,ECMAScript區(qū)分大小寫(xiě),注釋的格式相同,通過(guò){}確定代碼塊,原始數(shù)據(jù)類(lèi)型存儲(chǔ)在堆棧,對(duì)象的引用存儲(chǔ)在堆中
--ECMAScript是一種松散的語(yǔ)言,ECMAScript通過(guò)var操作符聲明變量,并且不限類(lèi)型,例如var n = 25,那么n就是數(shù)字類(lèi)型,var n = "string" ,那么n就是String類(lèi)型
--在每一行代碼后,可以不寫(xiě)分號(hào),ECMAScript自動(dòng)認(rèn)為該行的末尾為該行代碼的最后;ECMAScript中的變量可以不用初始化,在幕后系統(tǒng)將自動(dòng)完成初始化操作
--同一變量可以賦予不同類(lèi)型的數(shù)據(jù);變量的第一個(gè)字符只能是字母、下劃線(xiàn)或$ ,其他的字符可以是下劃線(xiàn)、$、或任意的字母、數(shù)字、字符
--和其他語(yǔ)言一樣,變量最好遵循駝峰書(shū)寫(xiě)法,或Pascal表示法、或匈牙利表示法
--和大多數(shù)語(yǔ)言不同的是, ECMAScript 變量在使用之前可以不必聲明,系統(tǒng)會(huì)自動(dòng)將該變量聲明為全局變量,例如var m = " Good " ; n = m + " Morning " ; alert(n)輸出結(jié)構(gòu)是 " Good Morning "
--在大多數(shù)語(yǔ)言里,String是對(duì)象,在ECMAScript中卻是原始數(shù)據(jù)類(lèi)型
原始數(shù)據(jù)類(lèi)型
ECMAScript原始數(shù)據(jù)類(lèi)型有五種:Undefined、Null、Boolean、Number、String。
typeof—判斷變量和值的數(shù)據(jù)類(lèi)型,通常有undefined、boolean、number、string、object五種類(lèi)型。
Undefined—當(dāng)變量被聲明但沒(méi)有初始化,或函數(shù)沒(méi)有明確返回一個(gè)值的時(shí)候,該變量或函數(shù)即為 Undefined 類(lèi)型。
Null—undefined是null的一種派生,當(dāng)代表一個(gè)對(duì)象的值不存在時(shí),該對(duì)象返回null。
Boolean—包含兩個(gè)值,true and false , false不等于0,但0可以轉(zhuǎn)換為false 。
Number—可以定義32位整型數(shù)據(jù)或64位浮點(diǎn)型數(shù)據(jù)。定義數(shù)字類(lèi)型變量時(shí),在數(shù)字前加0即為八進(jìn)制,加0x為十六進(jìn)制,它們計(jì)算后返回的結(jié)果統(tǒng)一為十進(jìn)制。通過(guò)var f = 1.0可以定義一個(gè)浮點(diǎn)類(lèi)型變量,有意思的是,當(dāng)f被用于計(jì)算之前,它實(shí)際是以 String類(lèi)型存儲(chǔ)的。當(dāng)浮點(diǎn)類(lèi)型數(shù)據(jù)很大或很小時(shí)(可以前后移動(dòng)六位),將使用E表示法來(lái)表示浮點(diǎn)數(shù)據(jù),最大可以存儲(chǔ)17位數(shù)據(jù)。另外,isFinite()方法可以判斷一個(gè)數(shù)值是否有限,isNaN()方法可以判斷一個(gè)數(shù)據(jù)是非數(shù)字類(lèi)型。
String—String在ECMAScript中是原始數(shù)據(jù)類(lèi)型,并且是唯一沒(méi)有空間大小限制的數(shù)據(jù)類(lèi)型。和Java不同的是,var s = " javascript " 和var s = 'javascript'均是合法的表示方法。
數(shù)據(jù)轉(zhuǎn)換
在不同數(shù)據(jù)類(lèi)型之間轉(zhuǎn)換是任何一門(mén)編程語(yǔ)言的一個(gè)重要特性,ECMAScript提供了一系列簡(jiǎn)單的方法來(lái)實(shí)現(xiàn)數(shù)據(jù)的轉(zhuǎn)換,大多數(shù)數(shù)據(jù)類(lèi)型都提供了簡(jiǎn)單的轉(zhuǎn)換方法,對(duì)于復(fù)雜的轉(zhuǎn)換則有一些全局方法來(lái)完成,不管是哪一種方法,ECMAScript中數(shù)據(jù)轉(zhuǎn)換都非常簡(jiǎn)單。
Boolean、number和string數(shù)據(jù)類(lèi)型是原始數(shù)據(jù)類(lèi)型,但它們同時(shí)是偽對(duì)象(在ECMAScript中偽對(duì)象到底該怎么解釋?zhuān)\(yùn)行機(jī)制如何還不清楚?有人知道請(qǐng)給予解答),擁有自己的屬性和方法,可以通過(guò)toString()方法來(lái)實(shí)現(xiàn)string類(lèi)型的轉(zhuǎn)換。ECMAScript定義所有的對(duì)象,不管是偽對(duì)象還是真實(shí)的對(duì)象,都可以實(shí)現(xiàn)toString()方法,string被列為偽對(duì)象的行列,自然也擁有toString()方法。將數(shù)字類(lèi)型數(shù)據(jù)轉(zhuǎn)換為string的時(shí)候,可以在 toString() 方法中加入2、8、16參數(shù),來(lái)實(shí)現(xiàn)不同進(jìn)制的數(shù)據(jù)輸出,例如var n = 10; alert(n.toString(2))輸出為1010,alert(n.toString(8))輸出為12,n.toString()和n.toString(10)相同。
ECMAScript提供了兩種方法來(lái)實(shí)現(xiàn)string類(lèi)型轉(zhuǎn)化為數(shù)字類(lèi)型的方法:parseInt()和parseFloat()。其他類(lèi)型轉(zhuǎn)換將會(huì)返回 NaN(Not a Number)。
Type Casting
ECMAScript數(shù)據(jù)類(lèi)型的轉(zhuǎn)換通常可以通過(guò)三個(gè)方法來(lái)實(shí)現(xiàn):Boolean(value)、Number(value)和String(value),這樣通常會(huì)產(chǎn)生一些非預(yù)期的結(jié)果。
Boolean
var b1 = Boolean( "" ); // false–empty string
var b2 = Boolean( " hi " ); // true–non-empty string
var b3 = Boolean( 100 ); // true–non-zero number
var b4 = Boolean( null ); // false-null
var b5 = Boolean( 0 ); // false-zero
var b6 = Boolean( new Object()); // true–object
Number
Number( false ) 0
Number( true ) 1
Number(undefined) NaN
Number( null ) 0
Number( " 5.5 " ) 5.5
Number( " 56 " ) 56
Number( " 5.6.7 " ) NaN
Number( new Object()) NaN
Number( 100 ) 100
String
String()能實(shí)現(xiàn)所有類(lèi)型數(shù)據(jù)的直接轉(zhuǎn)換,和使用toString()不同的是,String()能夠?qū)ull或undefined數(shù)據(jù)轉(zhuǎn)換為string。
引用類(lèi)型
ECMAScript 實(shí)際上并沒(méi)有傳統(tǒng)意義上的類(lèi),只是通過(guò)定義對(duì)象來(lái)等同于其他語(yǔ)言中的類(lèi),這一點(diǎn)我還比較含糊,以后可能會(huì)明白,在文中還是以“類(lèi)”來(lái)說(shuō)明。
var ob = new Object();
以上定義了一個(gè)Object對(duì)象的實(shí)例,這種語(yǔ)法和Java比較類(lèi)似。當(dāng)有參數(shù)的時(shí)候需要括號(hào)來(lái)引用,當(dāng)不存在參數(shù)時(shí),括號(hào)可以去掉。由于ECMAScript語(yǔ)言比較松散,不管是前面所屬的基礎(chǔ)語(yǔ)法,還是后面將提到的語(yǔ)法知識(shí),我們都應(yīng)該盡量按照一定的書(shū)寫(xiě)規(guī)范來(lái)約定自己的代碼格式,而不應(yīng)充分發(fā)揮語(yǔ)言松散的特點(diǎn)。
Object類(lèi)
Object類(lèi)和Java里的java.lang.Object類(lèi)比較相似,它是ECMAScript中其他所有類(lèi)的基類(lèi),它具有如下屬性:
constructor—建立對(duì)象的函數(shù)的一個(gè)引用,對(duì)于Object類(lèi)而言,該引用指向本地Object()方法。
prototype—對(duì)象里prototype對(duì)象的一個(gè)引用值。
Object 類(lèi)擁有的方法:
hasOwnProperty(property)—判斷property屬性是否存在于對(duì)象中,property數(shù)據(jù)類(lèi)型為string
isPrototypeOf(object)— 判斷一個(gè)對(duì)象是否是另一對(duì)象的 prototype
propertyIsEnumerable(property)— 判斷所給出的屬性能否使用 for 語(yǔ)句列舉出來(lái)
toString()—返回對(duì)象的原始類(lèi)型string
valueOf()—返回對(duì)象合適的原始值,對(duì)于多數(shù)類(lèi)而言,返回的值和toString()相同
Object類(lèi)的每一個(gè)屬性和方法都被其他的類(lèi)所重寫(xiě)
Boolean類(lèi)
定義方法var ob = new Boolean(true); ob是Boolean原始數(shù)據(jù)類(lèi)型的一個(gè)引用。在使用Boolean對(duì)象過(guò)程中,需要注意,所有的對(duì)象會(huì)自動(dòng)轉(zhuǎn)變?yōu)閠rue,因此var ob1 = new Boolean(false); var ob2 = ob1 && true; 最后ob2的值是true,非false。一般情況下,使用Boolean原始數(shù)據(jù)類(lèi)型可以避免這種情況。
Number類(lèi)
定義方法var o = new Number(15);
獲得原始數(shù)據(jù)的值var n = o.valueOf();
Number類(lèi)有一些為數(shù)字類(lèi)型的值特別設(shè)計(jì)的方法:
alert(o.toFixed( 2 )); // 輸出15.00
alert(o.toExponential( 1 )); // 輸出1.5e+1
在無(wú)法確定使用 toFixed 還是 toExponential 的時(shí)候,可以使用 toPrecision 方法來(lái)獲得取值:
alert(o.toPrecision( 1 )); // 輸出 2e+1
alert(o.toPrecision( 2 )); // 輸出 15
alert(o.toPrecision( 3 )); // 輸出 15.0
String類(lèi)
String類(lèi)是一種復(fù)雜引用類(lèi)型,這里僅列出一些常見(jiàn)的方法,其中不少都是模仿java.lang.String:
var s = new String( " Good Morning " );
alert(s.valueOf() == s.toString()); // 輸出true
alert(s.length); // 輸出12
alert(s.charAt( 1 )); // 輸出o
var sr = s.concat( " ! " ); alert(sr); // 輸出Good morning !
alert(s.indexOf( " o " ); // 輸出1
alert(s.lastIndexOf( " o " ); // 輸出6
alert(s.localeCompare(Good morning)); // 輸出0
alert(s.localeCompare(Apple)); // 輸出1
alert(s.localeCompare(House)); // 輸出-1
alert(s.slice( 2 )); // 輸出od morning
alert(s.substring( 2 )); // 輸出od morning
alert(s.slice( 2 , - 5 )); // 輸出od mo
alert(s.substring( 2 , - 5 )); // 輸出Go
alert(s.toUpperCase()); // 輸出GOOD MORNING
alert(s.toLowerCase()); // 輸出good morning
另外,所有String類(lèi)的方法同樣可以用于String原始數(shù)據(jù)類(lèi)型,因?yàn)樗莻螌?duì)象。
instanceof
instanceof操作符和typeof作用類(lèi)似,不同的是,instanceof需要明確指定對(duì)象是否屬于某種特定類(lèi)型。例如
var s = new String( " Good morning ! " );
alert(s instanceof String);
操作符和語(yǔ)句
ECMAScript 中大多數(shù)操作符、語(yǔ)句和 Java 都比較類(lèi)似,但也有一些其特有的,如 label 語(yǔ)句, with 語(yǔ)句, for-in 語(yǔ)句等等。
Functions
Functions是ECMAScript的核心,在任何時(shí)候任何地方都可以運(yùn)行的一組代碼語(yǔ)句。
function functionName(arg0, arg1, …… , argN) {
statements
}
當(dāng)function沒(méi)有返回值或return語(yǔ)句后沒(méi)有值的時(shí)候,該function實(shí)際上會(huì)被系統(tǒng)定義為undefined,當(dāng)function返回值的時(shí)候,function可以不必明確指定為某種數(shù)據(jù)類(lèi)型。
關(guān)于重載
重載是面向?qū)ο笳Z(yǔ)言的基本特性之一,但 ECMAScript 的 functions 并不能重載,在同一范圍里可以定義兩個(gè)完全相同的函數(shù),在調(diào)用函數(shù)的時(shí)候,最后的一個(gè)函數(shù)發(fā)揮作用。這種特性比較麻煩,但可以通過(guò) arguments 對(duì)象來(lái)實(shí)現(xiàn)和重載類(lèi)似的功能。
function func() {
if (arguments.length == 1 ) {
alert(arguments[ 0 ] + 5 );
} else if (arguments.length == 2 ) {
alert(arguments[ 0 ] + arguments[ 1 ]);
}
}
func( 5 ); // 輸出10
func( 10 , 15 ); // 輸出25
前面提到過(guò),在同一范圍里可以定義兩個(gè)完全相同的function,在調(diào)用function的時(shí)候,最后的一個(gè)function發(fā)揮作用。
function func(i) {
alert(i + 10 );
}
function func(i) {
alert(i + 20 );
}
func( 5 ); // 輸出25
可以看出,是調(diào)用了最后的一個(gè)function使得數(shù)據(jù)結(jié)果為25,如果使用Function類(lèi)來(lái)定義以上兩個(gè)函數(shù),那為什么會(huì)使用最后的一個(gè)function可能會(huì)更明確一些。
var func = new Function(“i”, “alert(i + 10 )”);
var func = new Function(“i”, “alert(i + 20 )”);
func( 5 );
func指向了另外一個(gè)引用,從而值發(fā)生了改變,func是作為function對(duì)象的引用而存在的,并且允許兩個(gè)變量指向同一個(gè) function。
和Function類(lèi)相關(guān)的屬性、方法有許多,例如length、toString()、valueOf()等等。其中toString()在調(diào)試程序中使用較多。
原文:http://www.blogjava.net/flyingis/archive/2006/06/13/52484.html
--和Java一樣,ECMAScript區(qū)分大小寫(xiě),注釋的格式相同,通過(guò){}確定代碼塊,原始數(shù)據(jù)類(lèi)型存儲(chǔ)在堆棧,對(duì)象的引用存儲(chǔ)在堆中
--ECMAScript是一種松散的語(yǔ)言,ECMAScript通過(guò)var操作符聲明變量,并且不限類(lèi)型,例如var n = 25,那么n就是數(shù)字類(lèi)型,var n = "string" ,那么n就是String類(lèi)型
--在每一行代碼后,可以不寫(xiě)分號(hào),ECMAScript自動(dòng)認(rèn)為該行的末尾為該行代碼的最后;ECMAScript中的變量可以不用初始化,在幕后系統(tǒng)將自動(dòng)完成初始化操作
--同一變量可以賦予不同類(lèi)型的數(shù)據(jù);變量的第一個(gè)字符只能是字母、下劃線(xiàn)或$ ,其他的字符可以是下劃線(xiàn)、$、或任意的字母、數(shù)字、字符
--和其他語(yǔ)言一樣,變量最好遵循駝峰書(shū)寫(xiě)法,或Pascal表示法、或匈牙利表示法
--和大多數(shù)語(yǔ)言不同的是, ECMAScript 變量在使用之前可以不必聲明,系統(tǒng)會(huì)自動(dòng)將該變量聲明為全局變量,例如var m = " Good " ; n = m + " Morning " ; alert(n)輸出結(jié)構(gòu)是 " Good Morning "
--在大多數(shù)語(yǔ)言里,String是對(duì)象,在ECMAScript中卻是原始數(shù)據(jù)類(lèi)型
原始數(shù)據(jù)類(lèi)型
ECMAScript原始數(shù)據(jù)類(lèi)型有五種:Undefined、Null、Boolean、Number、String。
typeof—判斷變量和值的數(shù)據(jù)類(lèi)型,通常有undefined、boolean、number、string、object五種類(lèi)型。
Undefined—當(dāng)變量被聲明但沒(méi)有初始化,或函數(shù)沒(méi)有明確返回一個(gè)值的時(shí)候,該變量或函數(shù)即為 Undefined 類(lèi)型。
Null—undefined是null的一種派生,當(dāng)代表一個(gè)對(duì)象的值不存在時(shí),該對(duì)象返回null。
Boolean—包含兩個(gè)值,true and false , false不等于0,但0可以轉(zhuǎn)換為false 。
Number—可以定義32位整型數(shù)據(jù)或64位浮點(diǎn)型數(shù)據(jù)。定義數(shù)字類(lèi)型變量時(shí),在數(shù)字前加0即為八進(jìn)制,加0x為十六進(jìn)制,它們計(jì)算后返回的結(jié)果統(tǒng)一為十進(jìn)制。通過(guò)var f = 1.0可以定義一個(gè)浮點(diǎn)類(lèi)型變量,有意思的是,當(dāng)f被用于計(jì)算之前,它實(shí)際是以 String類(lèi)型存儲(chǔ)的。當(dāng)浮點(diǎn)類(lèi)型數(shù)據(jù)很大或很小時(shí)(可以前后移動(dòng)六位),將使用E表示法來(lái)表示浮點(diǎn)數(shù)據(jù),最大可以存儲(chǔ)17位數(shù)據(jù)。另外,isFinite()方法可以判斷一個(gè)數(shù)值是否有限,isNaN()方法可以判斷一個(gè)數(shù)據(jù)是非數(shù)字類(lèi)型。
String—String在ECMAScript中是原始數(shù)據(jù)類(lèi)型,并且是唯一沒(méi)有空間大小限制的數(shù)據(jù)類(lèi)型。和Java不同的是,var s = " javascript " 和var s = 'javascript'均是合法的表示方法。
數(shù)據(jù)轉(zhuǎn)換
在不同數(shù)據(jù)類(lèi)型之間轉(zhuǎn)換是任何一門(mén)編程語(yǔ)言的一個(gè)重要特性,ECMAScript提供了一系列簡(jiǎn)單的方法來(lái)實(shí)現(xiàn)數(shù)據(jù)的轉(zhuǎn)換,大多數(shù)數(shù)據(jù)類(lèi)型都提供了簡(jiǎn)單的轉(zhuǎn)換方法,對(duì)于復(fù)雜的轉(zhuǎn)換則有一些全局方法來(lái)完成,不管是哪一種方法,ECMAScript中數(shù)據(jù)轉(zhuǎn)換都非常簡(jiǎn)單。
Boolean、number和string數(shù)據(jù)類(lèi)型是原始數(shù)據(jù)類(lèi)型,但它們同時(shí)是偽對(duì)象(在ECMAScript中偽對(duì)象到底該怎么解釋?zhuān)\(yùn)行機(jī)制如何還不清楚?有人知道請(qǐng)給予解答),擁有自己的屬性和方法,可以通過(guò)toString()方法來(lái)實(shí)現(xiàn)string類(lèi)型的轉(zhuǎn)換。ECMAScript定義所有的對(duì)象,不管是偽對(duì)象還是真實(shí)的對(duì)象,都可以實(shí)現(xiàn)toString()方法,string被列為偽對(duì)象的行列,自然也擁有toString()方法。將數(shù)字類(lèi)型數(shù)據(jù)轉(zhuǎn)換為string的時(shí)候,可以在 toString() 方法中加入2、8、16參數(shù),來(lái)實(shí)現(xiàn)不同進(jìn)制的數(shù)據(jù)輸出,例如var n = 10; alert(n.toString(2))輸出為1010,alert(n.toString(8))輸出為12,n.toString()和n.toString(10)相同。
ECMAScript提供了兩種方法來(lái)實(shí)現(xiàn)string類(lèi)型轉(zhuǎn)化為數(shù)字類(lèi)型的方法:parseInt()和parseFloat()。其他類(lèi)型轉(zhuǎn)換將會(huì)返回 NaN(Not a Number)。
Type Casting
ECMAScript數(shù)據(jù)類(lèi)型的轉(zhuǎn)換通常可以通過(guò)三個(gè)方法來(lái)實(shí)現(xiàn):Boolean(value)、Number(value)和String(value),這樣通常會(huì)產(chǎn)生一些非預(yù)期的結(jié)果。
Boolean
var b1 = Boolean( "" ); // false–empty string
var b2 = Boolean( " hi " ); // true–non-empty string
var b3 = Boolean( 100 ); // true–non-zero number
var b4 = Boolean( null ); // false-null
var b5 = Boolean( 0 ); // false-zero
var b6 = Boolean( new Object()); // true–object
Number
Number( false ) 0
Number( true ) 1
Number(undefined) NaN
Number( null ) 0
Number( " 5.5 " ) 5.5
Number( " 56 " ) 56
Number( " 5.6.7 " ) NaN
Number( new Object()) NaN
Number( 100 ) 100
String
String()能實(shí)現(xiàn)所有類(lèi)型數(shù)據(jù)的直接轉(zhuǎn)換,和使用toString()不同的是,String()能夠?qū)ull或undefined數(shù)據(jù)轉(zhuǎn)換為string。
引用類(lèi)型
ECMAScript 實(shí)際上并沒(méi)有傳統(tǒng)意義上的類(lèi),只是通過(guò)定義對(duì)象來(lái)等同于其他語(yǔ)言中的類(lèi),這一點(diǎn)我還比較含糊,以后可能會(huì)明白,在文中還是以“類(lèi)”來(lái)說(shuō)明。
var ob = new Object();
以上定義了一個(gè)Object對(duì)象的實(shí)例,這種語(yǔ)法和Java比較類(lèi)似。當(dāng)有參數(shù)的時(shí)候需要括號(hào)來(lái)引用,當(dāng)不存在參數(shù)時(shí),括號(hào)可以去掉。由于ECMAScript語(yǔ)言比較松散,不管是前面所屬的基礎(chǔ)語(yǔ)法,還是后面將提到的語(yǔ)法知識(shí),我們都應(yīng)該盡量按照一定的書(shū)寫(xiě)規(guī)范來(lái)約定自己的代碼格式,而不應(yīng)充分發(fā)揮語(yǔ)言松散的特點(diǎn)。
Object類(lèi)
Object類(lèi)和Java里的java.lang.Object類(lèi)比較相似,它是ECMAScript中其他所有類(lèi)的基類(lèi),它具有如下屬性:
constructor—建立對(duì)象的函數(shù)的一個(gè)引用,對(duì)于Object類(lèi)而言,該引用指向本地Object()方法。
prototype—對(duì)象里prototype對(duì)象的一個(gè)引用值。
Object 類(lèi)擁有的方法:
hasOwnProperty(property)—判斷property屬性是否存在于對(duì)象中,property數(shù)據(jù)類(lèi)型為string
isPrototypeOf(object)— 判斷一個(gè)對(duì)象是否是另一對(duì)象的 prototype
propertyIsEnumerable(property)— 判斷所給出的屬性能否使用 for 語(yǔ)句列舉出來(lái)
toString()—返回對(duì)象的原始類(lèi)型string
valueOf()—返回對(duì)象合適的原始值,對(duì)于多數(shù)類(lèi)而言,返回的值和toString()相同
Object類(lèi)的每一個(gè)屬性和方法都被其他的類(lèi)所重寫(xiě)
Boolean類(lèi)
定義方法var ob = new Boolean(true); ob是Boolean原始數(shù)據(jù)類(lèi)型的一個(gè)引用。在使用Boolean對(duì)象過(guò)程中,需要注意,所有的對(duì)象會(huì)自動(dòng)轉(zhuǎn)變?yōu)閠rue,因此var ob1 = new Boolean(false); var ob2 = ob1 && true; 最后ob2的值是true,非false。一般情況下,使用Boolean原始數(shù)據(jù)類(lèi)型可以避免這種情況。
Number類(lèi)
定義方法var o = new Number(15);
獲得原始數(shù)據(jù)的值var n = o.valueOf();
Number類(lèi)有一些為數(shù)字類(lèi)型的值特別設(shè)計(jì)的方法:
alert(o.toFixed( 2 )); // 輸出15.00
alert(o.toExponential( 1 )); // 輸出1.5e+1
在無(wú)法確定使用 toFixed 還是 toExponential 的時(shí)候,可以使用 toPrecision 方法來(lái)獲得取值:
alert(o.toPrecision( 1 )); // 輸出 2e+1
alert(o.toPrecision( 2 )); // 輸出 15
alert(o.toPrecision( 3 )); // 輸出 15.0
String類(lèi)
String類(lèi)是一種復(fù)雜引用類(lèi)型,這里僅列出一些常見(jiàn)的方法,其中不少都是模仿java.lang.String:
var s = new String( " Good Morning " );
alert(s.valueOf() == s.toString()); // 輸出true
alert(s.length); // 輸出12
alert(s.charAt( 1 )); // 輸出o
var sr = s.concat( " ! " ); alert(sr); // 輸出Good morning !
alert(s.indexOf( " o " ); // 輸出1
alert(s.lastIndexOf( " o " ); // 輸出6
alert(s.localeCompare(Good morning)); // 輸出0
alert(s.localeCompare(Apple)); // 輸出1
alert(s.localeCompare(House)); // 輸出-1
alert(s.slice( 2 )); // 輸出od morning
alert(s.substring( 2 )); // 輸出od morning
alert(s.slice( 2 , - 5 )); // 輸出od mo
alert(s.substring( 2 , - 5 )); // 輸出Go
alert(s.toUpperCase()); // 輸出GOOD MORNING
alert(s.toLowerCase()); // 輸出good morning
另外,所有String類(lèi)的方法同樣可以用于String原始數(shù)據(jù)類(lèi)型,因?yàn)樗莻螌?duì)象。
instanceof
instanceof操作符和typeof作用類(lèi)似,不同的是,instanceof需要明確指定對(duì)象是否屬于某種特定類(lèi)型。例如
var s = new String( " Good morning ! " );
alert(s instanceof String);
操作符和語(yǔ)句
ECMAScript 中大多數(shù)操作符、語(yǔ)句和 Java 都比較類(lèi)似,但也有一些其特有的,如 label 語(yǔ)句, with 語(yǔ)句, for-in 語(yǔ)句等等。
Functions
Functions是ECMAScript的核心,在任何時(shí)候任何地方都可以運(yùn)行的一組代碼語(yǔ)句。
function functionName(arg0, arg1, …… , argN) {
statements
}
當(dāng)function沒(méi)有返回值或return語(yǔ)句后沒(méi)有值的時(shí)候,該function實(shí)際上會(huì)被系統(tǒng)定義為undefined,當(dāng)function返回值的時(shí)候,function可以不必明確指定為某種數(shù)據(jù)類(lèi)型。
關(guān)于重載
重載是面向?qū)ο笳Z(yǔ)言的基本特性之一,但 ECMAScript 的 functions 并不能重載,在同一范圍里可以定義兩個(gè)完全相同的函數(shù),在調(diào)用函數(shù)的時(shí)候,最后的一個(gè)函數(shù)發(fā)揮作用。這種特性比較麻煩,但可以通過(guò) arguments 對(duì)象來(lái)實(shí)現(xiàn)和重載類(lèi)似的功能。
function func() {
if (arguments.length == 1 ) {
alert(arguments[ 0 ] + 5 );
} else if (arguments.length == 2 ) {
alert(arguments[ 0 ] + arguments[ 1 ]);
}
}
func( 5 ); // 輸出10
func( 10 , 15 ); // 輸出25
前面提到過(guò),在同一范圍里可以定義兩個(gè)完全相同的function,在調(diào)用function的時(shí)候,最后的一個(gè)function發(fā)揮作用。
function func(i) {
alert(i + 10 );
}
function func(i) {
alert(i + 20 );
}
func( 5 ); // 輸出25
可以看出,是調(diào)用了最后的一個(gè)function使得數(shù)據(jù)結(jié)果為25,如果使用Function類(lèi)來(lái)定義以上兩個(gè)函數(shù),那為什么會(huì)使用最后的一個(gè)function可能會(huì)更明確一些。
var func = new Function(“i”, “alert(i + 10 )”);
var func = new Function(“i”, “alert(i + 20 )”);
func( 5 );
func指向了另外一個(gè)引用,從而值發(fā)生了改變,func是作為function對(duì)象的引用而存在的,并且允許兩個(gè)變量指向同一個(gè) function。
和Function類(lèi)相關(guān)的屬性、方法有許多,例如length、toString()、valueOf()等等。其中toString()在調(diào)試程序中使用較多。
原文:http://www.blogjava.net/flyingis/archive/2006/06/13/52484.html
相關(guān)文章
JavaScript中this函數(shù)使用實(shí)例解析
這篇文章主要介紹了JavaScript中this函數(shù)使用實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02javascript中的變量作用域以及變量提升詳細(xì)介紹
在javascript中, 理解變量的作用域以及變量提升是非常有必要的。這個(gè)看起來(lái)是否很簡(jiǎn)單,但其實(shí)并不是你想的那樣,還要一些重要的細(xì)節(jié)你需要理解2013-10-10點(diǎn)選TOP后并不是直接跳到頁(yè)頂?shù)模菨L動(dòng)上去的
點(diǎn)選TOP后并不是直接跳到頁(yè)頂?shù)?,而是滾動(dòng)上去的...2007-02-02js實(shí)現(xiàn)帶翻轉(zhuǎn)動(dòng)畫(huà)圖片時(shí)鐘
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)帶翻轉(zhuǎn)動(dòng)畫(huà)的圖片時(shí)鐘,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04JavaScript實(shí)現(xiàn)按照指定長(zhǎng)度為數(shù)字前面補(bǔ)零輸出的方法
這篇文章主要介紹了JavaScript實(shí)現(xiàn)按照指定長(zhǎng)度為數(shù)字前面補(bǔ)零輸出的方法,實(shí)例分析了javascript操作數(shù)字補(bǔ)零的技巧,需要的朋友可以參考下2015-03-03JavaScript操作元素教你改變頁(yè)面內(nèi)容樣式
這篇文章主要為大家介紹了JavaScript操作元素,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2021-11-11