實字
Constructors
Get、Set、Delete
變數 與 屬性 : 變數無法刪除,屬性可以刪除
object call by value 、reference
call by sharing
shallow copy 淺層 deep copy 深層
array
***************************************************
var 變數 = {
property : value ,//值
propertyp : function() {} //函式
} //物件實字
var 變數 = new Object(變數); //Object Constructors 與實字是相同的
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Get : 物件取值 Property 為字串
object . Propertyp //用點的方式 .
object [string] //用[] 裡放字串屬性名稱
* 若找無 Property,會顯示underfined,不會像變數 not defind
var a ={
b : 1,
c : function() {}
}
a.b or a['b'] //變數
a.c(); or a['c']() //函式
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
set :
object . Propertyp //用點的方式 .
object [string] //用[] 裡放字串屬性名稱
var a ={ }
a.b = 1 or a['b'] = 1//變數
a.c = function() {}; or a['c'] = function() {}; //函式
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
delete :
delete object . Propertyp //用點的方式 .
delete object [string] //用[] 裡放字串屬性名稱
var a ={
b : 1,
c : function() {}
}
delete a.b or delete a['b'] = 1 //變數、函式
* 變數 與 物件 : 變數無法刪除,物件下的屬性可以刪除
var e = 1;
delete e; // fail 變數
delete a.c; //success 屬性
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
call by value 、reference ,物件使用reference 給值
*重新訂義 {},則會記憶體上重新建立
var a = {
t : 123,
}
var b = a; //reference 相同位置
b.t = 'test';
console.log(a, b); show { t = 'test'} ,{ t = 'test'}
b = {
t =123
}
console.log(a, b); show { t = 'test'} ,{ t = 123}
複雜:
var a = { x:1}
var b = a;
a.y = a = {y:1} //同時執行reference
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
call by sharing
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
shallow copy 淺層 只能物件第一層的屬性
var a = {
x: 1,
y: '123',
};
var b = {};
b.x = a.x; 相同語法 Object.assign({}, 物件); Jquery.extend({}, 物件); //shallow copy
b.x = 0; //當變動b,Object reference ,a.x 也跟著變動,但結果不是
deep copy 深層
object to string =>Json.stringify
string to object => Json.parse
var a = {
x: 1,
y: '123',
};
var b = Json.parse(Json.stringify(a));
b.
將二個物件的reference轉為value
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
array 為物件的一種
可以增加屬性,但對陣列的長度不變
var a = [1,'2'];
a.b = 123; // add property
console.log(a);
取值 使用[Index] a[0] => show 1
設定值
a[0] ='123' => show ['123','2']
a[3] = a; => show ['123','2', empty, a] //若設定值超過陣列長度,則會自動延長,然中間的位置會設定empty