JavaScript中存在問題但卻難以避免的功能特性

          一,全局變量
          1.全局變量可以被任何部分在任意時間改變,復雜化,降低可靠性
          2.可能與子程序變量名相同,沖突可能導致程序無法運行,難以調試

          三種聲明全局變量模式
          1.脫離任何函數的var foo = value
          2.直接添加屬性至全局對象,全局對象是所有全局變量的容器,在web瀏覽器中全局對象名為window,window.foo = value
          3.直接未經聲明的變量 - 隱式的全局變量 foo = value

          二,沒有塊作用域,有函數作用域

          函數中定義的參數和變量在函數外部不可見,而在一個函數中任何位置的定義的變量在該函數的任何地方可見。

          function f1(){
              var a=1;
              function f2(){
                  if(false){
                      var a=2;    //變量基于函數,而非基于語句塊,沒有塊作用域
                  }
                  console.log(a); //undefined 未定義
              }
              f2();
              console.log(a);//1
          }
          f1();

          大多數語言中,一般聲明變量都是在第一次用到它的地方,在javascript中是一個壞習慣,因為沒有塊作用域,更好的是在每個函數開頭聲明所有變量。

          三,return語句返回一個值,值表達式必須和return在同一行上

          return {
              status:true
          };

          返回包含status成員元素的對象。

          如果用

          return
          {
              status:true
          };

          會返回undefined。

          四,保留字不能用來命名變量或函數,當保留字被用作對象字面量的鍵值時,必須用引號,而且不能用點表示法,必須使用括號表示法。

          var object = {case:value}; //非法
          var object = {'case':value}; //ok
          object.case = value;       //非法
          object['case'] = value;    //ok

          各瀏覽器對保留字使用限制上實現不同,以上語法在FF中合法,但其他瀏覽器不合法;再有不同的保留字行為也不相同。類似int/long/float等保留字在各瀏覽器中都可以做變量名及對象字面量的鍵值。但不建議使用任何保留字。

          五,typeof - 識別運算數類型的字符串

          但typeof null返回'object',更好的檢測null的方法: my_value === null

          對于正則表達式 typeof /a/,一些瀏覽器返回'object',另一些返回'function'

          六,parseInt - 將字符串轉換為整數

          1.此函數遇到非數字時就停止解析,即parseInt('16')和parseInt('16 abc')產生結果相同,都是16.
          2.如果字符串第一個字符是0,則基于八進制解析,而不是十進制。八進制中沒有8,9數字,所以parseInt('08')和parseInt('09')結果為0。此函數可以接收一個基數作為參數,parseInt('08',10)結果為8。

          七,浮點數

          0.1+0.2不等于0.3

          八,NaN

          function isNumber(value){
              return typeof value === 'number' && isFinite(value);
          }

          isFinite篩調NaN和Infinity,但是isFinite會試圖把它的運算數轉換為一個數字,如果運算數事實上不是一個數字,就會報錯,所以加上typeof value === 'number'。

          九,假值

          0,NaN,'',false,null,undefined全部等于假,但它們是不可互換的。

          posted on 2011-07-18 20:09 *** 閱讀(218) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2011年7月>
          262728293012
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          導航

          統計

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 义马市| 黄大仙区| 宣城市| 靖江市| 故城县| 贵德县| 民权县| 张家口市| 汾西县| 延津县| 香格里拉县| 沽源县| 大关县| 渭源县| 桦甸市| 潜山县| 大悟县| 舞阳县| 黑龙江省| 潍坊市| 宜丰县| 郓城县| 曲沃县| 蓝田县| 南澳县| 溧阳市| 霍城县| 海晏县| 依安县| 永德县| 澳门| 肃南| 定日县| 沙坪坝区| 武强县| 临朐县| 涪陵区| 蒙阴县| 万源市| 黔南| 麻阳|