欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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 

相關(guān)文章

最新評(píng)論