每天收穫一點,慢慢地就多了。
今天開始正式學習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