莊周夢蝶

          生活、程序、未來
             :: 首頁 ::  ::  :: 聚合  :: 管理

          ECMAScript基礎

          Posted on 2007-02-06 14:03 dennis 閱讀(436) 評論(0)  編輯  收藏 所屬分類: web開發
          ?開始讀《JAVASCRIPT高級程序設計》
          第2章 ECMAScript基礎

          JavaScript實質上是ECMAScript在web環境中的實現,還有其他實現(如Flash的ActionScript等)。因此了解基本的ECMAScript相當于掌握javascript的基礎。

          1。ECMAScript的基礎概念:
          1)區分大小寫
          2)變量是弱類型(解釋型語言的基本特點)
          3)每行結尾的分號可有可無(與java不同)
          4)注釋的形式與java相同(單行或者塊注釋)
          5)大括號代表代碼塊{}

          2。變量,使用var定義。如var test="test1"
          當然,變量是弱類型,并且可以不被初始化而定義
          var test="test1"
          var test2;
          test=1;
          建議采用匈牙利類型標記法來命名變量。

          3.關鍵字和保留字(略)

          4。原始值和引用值
          與java類似,變量分成原始類型與引用類型兩類:
          1)原始值存儲在stack中
          2)引用值是存儲在heap中的對象,存儲在變量處的是一個point

          5。原始類型:
          1)ECMAScript有5種原始類型:Undefined、Null、Boolean、Number和String。可以使用typeof來判斷一個值是否在某類型的范圍內。如:
          var?s="test";
          alert(
          typeof?s)??//輸出"string"

          注意:type null返回object,因為null被認為是對象的占位符。

          2)Undefined類型
          當變量未初始化時,該變量的默認值就是undefined。但是,undefined并不同于未定義的值。但是,typeof并不區分兩者,比如:
          var?temp1;
          alert(
          typeof?temp1);??//未初始化,輸出undefined
          alert(typeof?temp2);???//未定義,也是undefined


          函數無返回值,返回的也是undefined

          3)Null類型
          Null只有一個值,也就是null。Undefined本質上是從Null派生來的,因此兩者相等:
          alert(null==undefined);? //輸出true
          但兩者意義不同,Undefined表示變量未被初始化之前的值,而Null則表示尚未存在的對象,也就是對象的占位符。

          4)Boolean類型
          Boolean有兩個值:true,false

          5)Number類型
          Number類型很有趣,Number可以表示32位的數字,也可以表示64位的浮點數,以0開頭的數字當成八進制,以ox開頭即為十六進制。有趣的地方在于所有數字運算結果都是返回十進制!
          在ECMAScript中,浮點數的計算本質上是存儲的是字符串。
          Number類型的大小在Number.MAX_VALUE和Number.MIN_VALUE之間
          無窮大用Infinity表示,如你所見,Number.MAX_VALUE就是Infinity,而Number.MIN_VALUE就是-Infinity,可以通過isFinite(n)來判斷n是否超過界限

          最后,還有一個特殊值是NaN,表示Not a Number(非數),非數產生在類型轉換失敗時,注意,它與自身不相當:alert(NaN==NaN);? //輸出false

          不推薦使用NaN,我們可以通過isNaN()來判斷是否是非數(很常用咯)

          6) String類型
          String是唯一沒有固定大小的原始類型,可以存儲0或者多個Unicode字符。與java不同的是,可以使用雙引好和單引號來聲明字符:
          var s1="test1";
          var s2='test2';
          常見轉義符與其他語言相同。

          6。類型轉換
          1)轉換成字符串:
          Boolean,String和Number類型本質上都是偽對象,他們都有toString()方法(與java相同)

          Number類型的toString()有兩種模式:
          toString(),返回數字的十進制
          toString(n),返回n進制的字符串(n為2,8,10,16)

          2)轉換成數字:
          兩個方法:parseInt()和parseFloat()方法。用法略過,需要注意的是parseInt如果沒指定基數,會把以0開始的解析為8進制。parseFloat反而不會。

          3)強制類型轉換:
          3種強制類型轉換:
          String(value);
          Boolean(value);
          Number(value);
          規則如下:
          (1)String(value)與toString()基本一樣,除了對null或者undefined的轉換之外,如:
          var s1=String(null); //通過
          var oNull=null;
          var s2=oNull.toString(); //報錯

          (2)Boolean(value),如果該value是空字符串、數字0、undefined或者null,返回false,其他返回true

          (3)Number()與parseInt和parseFloat基本相同,不同的是Number()將轉換整體,如果轉換失敗返回NaN。如:
          Number(false)??;//??0
          Number(true);??//???1
          Number(new?Object());???//??NaN
          Number('5.6.7');????//??NaN


          7。引用類型:
          1)Object類:類似于java中java.lang.Object的地位和作用,js中所有類都繼承此類而來。它包含下面的屬性:
          (1)Constructor——對創建該對象函數的引用
          (2)Prototype——對該對象對象原型的引用,對所有的類,它將返回一個Object實例
          (3)HasOwnProperty(property)——判斷是否有某個屬性
          (4)IsPropertOf(object)——判斷該對象是否為另一個對象的原型
          (5)PropertyIsEnumerable(property)——判斷對象的屬性是否可以枚舉
          (6)ToString()——返回對象的原始字符串表示
          (7)ValueOf()——返回最適合該對象的原始值,對于許多類,它的結果與ToString()相同

          2)Boolean類,盡量避免使用,注意的是,在Boolean表達式中,所有的值將被自動轉化為true,所以下面的輸出:
          var oFalseObject=new Boolean(false);
          alert(oFalseObject&&true);? //輸出true,而不是false

          3) Number類,是Number原始類型的引用類型,應該少使用此類,盡量使用原始類型。需要注意3個方法:
          (1)toFixed():返回具有指定位數小數的字符串,如:
          var oNumberObject=new Number(99);
          alert(oNumberObject.toFixed(2));? // 輸出99.00

          ?(2) toExponential(),返回用科學記數法表示的數字的字符串形式,如:
          var oNumberObject=new Number(99);
          alert(oNumberObject.toExponential(1));? //輸出9.9e+1

          (3)toPrecision(),對數進行舍入,返回盡可能接近真實值的數字,如:
          var oNumberObject=new Number(99);
          alert(oNumberObject.toPrecision(3));? //輸出99.0
          注意,這3個方法都將進行四舍五入操作

          4)String類,是String原始類型的對象,常見方法見下面的例子:

          var?oStringObject=new?String("hello?world");
          alert(oStringObject.length);??
          //輸出11
          alert(oStringObject.toString()==oStringObject.valueOf());??//輸出true
          alert(oStringObject.charAt(1));???//輸出e
          alert(oStringObject.charCodeAt(1));?//輸出e的字符代碼:101
          alert(oStringObject.concat(",china"));???//輸出hello?world,china
          alert(oStringObject.indexOf("e"));???//輸出1
          alert(oStringObject.lastIndexOf("o"));??//輸出7

          var?oStringObject1=new?String("yellow");
          var?oStringObject2=new?String("brick");
          var?iResult=oStringObject1.localeCompare(oStringObject2);??//根據本地比較
          if(iResult>0){
          ??alert(
          "oStringObject1在oStringObject2后面");
          }
          else?if(iResult<0){
          ???alert(
          "oStringObject1在oStringObject2前面");
          }
          else
          ???alert(
          "oStringObject1和oStringObject2相同");
          alert(oStringObject.substring(
          3,7));??//輸出"lo?w"
          alert(oStringObject.slice(3,7));??//輸出"lo?w"
          alert(oStringObject.toUpperCase());
          alert(oStringObject.toLowerCase());
          alert(
          "中國".toLocaleLowerCase());


          8.操作符和語句,省略大部分操作符的介紹和控制語句,與其他語言(java,ruby)基本相同,需要注意的摘抄如下:
          1)delete操作符:用于刪除對以前定義的對象屬性或者方法的引用,如:
          var?o=new?Object();
          o.name
          ="dennis";
          alert(o.name);?
          //輸出dennis
          delete?o.name;???//解除引用
          alert(o.name);??//輸出undifined


          2)for ... in語句,嚴格的枚舉語句,用于枚舉對象屬性

          3)switch可以作用于字符串,而不僅僅是整數

          4)不支持重載(與ruby相同),可以通過arguments對象來變相實現

          5)在ECMAScript中,函數其實是完整一個對象(與ruby相同,或者說動態語言的基本特點),可以采用:
          var function_name=new Function(arg1,arg2,arg3,...,function_body);
          來定義函數(速度比普通方法慢)。函數可以作為參數傳遞,函數的length屬性返回此函數的參數個數
          6)ECMAScript的閉包概念與其他動態語言的概念很不同,我還不大理解,過段時間好好研究一下。(寫入備忘錄)
          主站蜘蛛池模板: 维西| 策勒县| 公安县| 河曲县| 五家渠市| 新丰县| 土默特左旗| 团风县| 湟源县| 乌拉特中旗| 北碚区| 米易县| 新宾| 托里县| 南川市| 郴州市| 德清县| 桐庐县| 新晃| 祁东县| 上虞市| 和静县| 全南县| 丰原市| 安康市| 闸北区| 礼泉县| 安徽省| 化州市| 巴彦淖尔市| 万全县| 福安市| 囊谦县| 保定市| 安达市| 胶南市| 郸城县| 凯里市| 夹江县| 肇庆市| 贺州市|