javascript學習筆記[1]–變數

來源:互聯網
上載者:User

     每天收穫一點,慢慢地就多了。

     今天開始正式學習javascript,雖然以前都有一些涉及,但是沒有好好的系統的學上一編,趁這段寒假,多學一點總是好的,堅持就是勝利,廢話不多說了。

     1. 資料類型:

      簡單(基本)資料類型:Boolean, Number,String,Undefined,Null。

      複雜資料類型:Array,Object等。

     2.區分undefined 和 null

         Null:

          (1) null 意味著沒有值,即缺少資料。

          (2)包含 null 的變數包含“無值”或“無對象”。換句話說,該變數沒有儲存有效數、字串、boolean、數組或對象。可以通過給一個變數賦 null 值來清除變數      的內容。 

          (3) Null類型只有一個值的資料類型,這個特殊的值是null。從邏輯角度來看,null值表示一個Null 物件指標,而這也正是使用typeof操作符檢測null時會返回"object"的原因(null是一種特殊的object)

         Undefined:

          (1) undefined常量用於尚未初始化的變數或未初始化的動態對象屬性的特殊值(未定義的值和定義未賦值的為undefined)

           (2)   Undefined類型只有一個值,即特殊的undefined(注意大小寫,用的時候也不用加引號,人家不是string)。在使用var聲明變數但未對其加以初始化時,這個變數的值就是undefined

      實際上,undefined值是派生自null值的,因此ECMA-262規定對它們的相等性測試要返回true,但是使用全等運算子(===)對null和undefined進行比較時,比較結果為不相等。

     3. 區分等於(==)和全等於(===)

         重點:等於(==)的情況下只要值相同就返回True;

                   而全等(===)的時候需要值和類型都要匹配才能返回True.具體看堆棧的區別及邏輯等和邏輯全等

      4.變數的聲明:

             4.1 變數的聲明必須使用var。

a=10;

           這僅僅是給全域對象建立了一個新屬性(但它不是變數)。“不是變數”並不是說它不能被改變,而是指它不符合ECMAScript規範中的變數概念,所以它“不是變數”,這個也是我的盲區,我是參考了湯姆大叔的部落格才知道的。詳細分析參考深入理解JavaScript系列(12):變數對象(Variable Object)

          4.2 變數聲明提升

                這個比較好理解,執行器會將所有的變數聲明移到語句的頂部,如果是在函數的內部聲明局部變數,那麼就會將變數聲明提升到函數體內的最頂部。這個只是針對聲明語句。

         4.3 變數的傳值和傳址

              傳值:

var i = 10;var j = i;   //輸出 10alert(i);i = 30;alert(j);   //輸出10function sqrt(x){    return x*x;}var inValue = 3;var outResult = sqrt(inValue);alert(outResult);    //輸出 9alert(inValue);       //輸出 3

          傳址:

var myArray = ["tom", "dick"];var newArray = myArray;alert(newArray[1]);      //輸出dickmyArray[1] = "jack";alert(newArray[1]);       //輸出jack

        4.4 記憶體使用量規則-堆和棧

            堆:為複雜資料類型分配空間,例如數組,Object對象,運行時動態分配記憶體,速度慢。

            棧:基本類型的變數和對象的引用,速度快,可以共用(這邊資料共用還有些不理解。)’

           總而言之,javascript堆不需要程式碼顯式地釋放,會有自動的記憶體回收機制。但是為了提高程式效能,還是可以自己釋放的,最常用的方法就是對其賦值為null。

            注意點:

var str = new String("abc");  //對象存放在堆中var str = "abc";            //棧中存放值“abc”和對值的引用//推薦使用第二種建立方法

           堆棧的區別及邏輯等和邏輯全等

            

//只是比較棧中的值,不管邏輯等於還是邏輯全等於運算都返回true,可以看出str1.str2指向同一個值、var str1 = "abc";var str2 = "abc";alert(str1 == str2);       //truealert(str1 ===str2);     //true//實際比較的是堆中的內容,不管是邏輯等於還是邏輯全等於運算都返回false、可以看出str1,str2指向的不是同一個對象。var str1 = new String("abc");var str2 = new String("abc");alert(str1 == str2);      //falsealert(str1 === str2);  //false//比較堆中和棧中的值,進行邏輯等於運算的時候,會首先將變數轉成相同的資料類型,然後進行對比,所以返回true,但是邏輯全等於會對資料類型進行比較,看是否引用了同一個資料,返回falsevar str1 = new String("abc");var str2 = "abc";alert(str1 == str2);      //truealert(str1 === str2);     //false

              今天先寫這麼多吧,其實還有好多地方需要學習的,比方typeof,資料類型轉換,array,object。

              有關變數的知識很多都是參考了網上一些別人寫得部落格,以下附上連結:

                 深入理解JavaScript系列(12):變數對象(Variable Object)
                 Javascript 中 null、NaN和undefined的區別
                 JavaScript之資料類型
                 javascript定義對象
                 javascript動態添加、修改、刪除對象的屬性和方法

             以上全部都屬個人原創,請大家轉載的時候附上原創連結: http://www.cnblogs.com/tonylp

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.