標籤:
原始值與應用值
1.原始實值型別資料室不可變的 (改變原始實值型別資料, 返回的是一個新的對象)
var str0 = ‘test‘;var str1 = str.replace(‘t‘, ‘a‘);alert(str1); // 輸出 ‘aest‘alert(str0); // 輸出 ‘test‘
2.應用實值型別是可變的(他的值是可以修改的)
// 對象直接量var o = {x:1, y:2, z:3};console.log(o); // 輸出 Object { x=1, y=2, z=3}o.z = 4;console.log(o); // 輸出 Object { x=1, y=2, z=4}// 數組直接量var arr = [1, 2, 3];console.log(arr) // 輸出 [1,2,3]arr[2] = 4;console.log(arr) // 輸出[1, 2,4]幾個知識點1.javascript是ECMAscript的實現,其組成部分有:
2. 原始類型與參考型別(以下是w3school的解釋很清晰)
原始值: 儲存在棧(stack)中的簡單資料區段,也就是說,它們的值直接儲存在變數訪問的位置。
引用值: 儲存在堆(heap)中的對象,也就是說,儲存在變數處的值是一個指標(point),指向儲存物件的記憶體處。
(*在許多語言中,字串都被看作參考型別,而非原始類型,因為字串的長度是可變的。ECMAScript 打破了這一傳統。)
3.javascript變數聲明及範圍
1).js中變數聲明有如下幾種(分為 使用關鍵字var , 不使用關鍵字var)
//------------------------------------------//
// 分別用var聲明var a;var b; a = ‘hello‘; b = ‘world‘;// 單var聲明var a, b;// 單var 聲明並賦值var a = 1, b = 2, c;//------------------------------------------//// 不使用var聲明 g = ‘test‘; // 需要注意的是這種不用var聲明變數 直接賦值的方式, 在任何地方使用都會被視作全域對象的屬性, 可以使用delete刪除, 但是不推薦這種用法(EC5strict 模式下報錯)
2).js中變數的範圍分為全域範圍()和局部範圍(由函數function構成)倆種
(** js引擎執行時, 每進入一個範圍(環境), 會根據當前上下文, 建立一個針對該環境的內容物件,在這個階段,variableObject對象,範圍鏈,以及this所指向的對象都會被確定推薦閱讀)
4. 對象的比較,即使倆個對象包含同樣的屬性及同樣的值, 他們也是不相等的( 各個索引完全相等的兩個數組也不相等)
對象的比較是引用的比較,若且唯若他們引用同一個對象時, 它們才相等
(這個好比現實中 有姓名相同和年齡相同但是不是同一個人, 但是如果這個人還有個小名(其它引用)那麼這個小名和他的大名就都指他一個人了)
var o1 = {name:‘zhang‘, age:23};console.log(o1); // 輸出Object { x=1, y=1}var o2 = {name:‘zhang‘, age:23};console.log(o1); // 輸出Object { x=1, y=1}console.log( o1 === o2 ); // 輸出falsevar o3 = o1;console.log(o3); // 輸出Object { x=1, y=1}console.log( o3 === o1 ); // 輸出true
javascript權威指南-資料類型筆記