Js Object

  • 94
  • 0
  • Js
  • 2020-01-09

實字

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