物件 變數 型別
JS物件可以指派給一個變數並會在執行時期擁有型別
關於物件的定義: -In computer science, an object is a value in memory which is possibly referenced by an identifier.
computer science 電腦科學領域
value in memory 在記憶體中的資料
referenced by an identifier 被一個識別符號給參考
變數命名 英文, $, _ 開頭
JS 是個物件導向程式語言
所有的物件都是物件型別
原始型別 number String boolean null 讀 [n!vl] (音標) 不是 [nul] undefined symbol (符號) ES6+
不是原始型別的,都是物件型別
物件型別的基本特性(擁有屬性)
屬性(Property)
-任何一個JS物件只會有一個成分,那就是屬性 -屬性和變數很像,可以指定任意資料給任意屬性
建立物件
設定屬性
car.name car['name']
屬性名稱一定是字串
JS是個動態型別語言
我們可以使用 var / let / const 來宣告變數
變數本身不包含物件的內容 只包含記憶體的位置 所以後續如何宣告,都還是那個位置
var x; x = 5; var x; typeof(x) x = "Brian" (變化)
JS的動態型別特性 無型別(Untyped) 無法在開發時期宣告型別 弱型別(Weak-typed) 只能在執行時期檢查型別
物件 變數 型別 之間的關係
物件 object 執行時期
變數 variable 開發時期
型別 type 執行時期
var a; a = 1; a = "a"; a = "a" + a;
幾個變數:1 幾個型別:3 幾個物件:5
下圖請根據程式由上到下推演記憶體位置的變化
JS不會reuse,沒有被指向就直接被回收。當需要就會創新的物件。
屬性 變數 執行時期 開發時期
delete car.name; 只有用 var let const 才算是變數 '' 會存在當前範圍
屬性可以被刪除,變數不行。 (刪除成功會回傳true) 不是屬性就是變數。
當前範圍(Scoping)(又稱 作用域範圍)
對瀏覽器而言 -所有不在 function 內執行的程式碼,都屬於 全域範圍 的程式碼 (function內的變數,就存在function內(AO),function外的,就存在全域(window, 根元素))
變數跟著頁面走,除非重整才會消失。
對Node.js 而言
Globel ...
全域變數的副作用:有可能會被覆蓋、影響,而導致錯誤。 盡可能不要使用全域變數。
全域變數是邪惡的,盡可能不要汙染window
變數宣告在function內,會跟著走
屬性、變數就是指標,用來保存記憶體位置。
請問以下程式碼 輸出為何?
console.log(a) ?
console.log(b) ?
2 b is not defined
var a = {'a1' : 1 , 'a2' : 2}; var b = []; b.push(a); b.push(a); b[0].a1 = 2;
b[1].a1 ??
2
var a = {'a1' : 1 , 'a2' : 2}; var b = []; b.push(a); b[0].a1 = 2;
a.a1 ??
2
var a = {x:1} var b = a a = {x:2}
b.x ??
1
var a = {x:1} var p = a.x; p=2;
a.x?
1
var a = {x:1}; var b = a; a.x = a = {x:2};
b.x ?? {x:2} a.x ?? 2
a.x = a = {x:2}
=> 當下的 a = {x:2} a.x = {x:2}
不要拆成 兩行/兩個階段
var let const
let 區域變數,不能重複宣告,不能先用才宣告
for(let i = 0;i < 10;i++){ timeout(function(){console.log(i);},i*100); }
將所寫的JS降版
原始型別
不能擴增屬性
物件型別
可以自由擴增屬性
檢查屬性是否存在 if ('c' in obj) {}
檢查是不是 undefined if (c == undefined)
檢查是否有這個屬性 obj.hasOwnProperty()
繼承祖先的屬性
get O set X
不要用這兩種 new Object(10); (宣告成物件) new Number(10);
直接宣告成原始型別就好 let a = 10;
物件型別的取值方式 Object.valueOf()
直接用 {} 去 new 一個物件
{} 跟 [] 都是
Date 要特別注意月份
JS 有時區的概念
2019-02-16 是標準的
2019/02/16 是本地時間
要注意時區
/正則表示式/
Last updated