javascript學習筆記[1]--變量


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

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

     1. 數據類型:

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

      復雜數據類型:Array,Object等。

     2.區分undefined 和 null

         Null:

          (1) null 意味着沒有值,即缺少數據。

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

          (3) 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;   //輸出 10
alert(i);
i = 30;
alert(j);   //輸出10




function sqrt(x){
    return x*x;
}

var inValue = 3;
var outResult = sqrt(inValue);
alert(outResult);    //輸出 9
alert(inValue);       //輸出 3

          傳址:

var myArray = ["tom", "dick"];
var newArray = myArray;
alert(newArray[1]);      //輸出dick
myArray[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);       //true
alert(str1 ===str2);     //true

//實際比較的是堆中的內容,不管是邏輯等於還是邏輯全等於運算都返回false、可以看出str1,str2指向的不是同一個對象。
var str1 = new String("abc");
var str2 = new String("abc");
alert(str1 == str2);      //false
alert(str1 === str2);  //false

//比較堆中和棧中的值,進行邏輯等於運算的時候,會首先將變量轉成相同的數據類型,然后進行對比,所以返回true,但是邏輯全等於會對數據類型進行比較,看是否引用了同一個數據,返回false
var str1 = new String("abc");
var str2 = "abc";
alert(str1 == str2);      //true
alert(str1 === str2);     //false

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

              有關變量的知識很多都是參考了網上一些別人寫得博客,以下附上鏈接:

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM