object的建立可以透過
JSON format或者
new()兩種方式:
var e = {};
var p = {x:10, y:20};
var name;
for (name in p) {
alert('p.' + name + '=' + p[name]);
}
透過new可以建立新的object(呼叫constructor進行初始化),比如new Object(),會建立一個empty object(constructor為{})。可以透過.或者[]存取object的properties,透過delete移除object的properties。用var宣告的properity不能被delete。
var person = new Object();
person.name = "Brook";
person.age = 30;
person['weight'] = 50;
alert(person['name']);
alert(person.age);
alert(person.weight);
delete person.weight;
alert(person.weight);
檢查property是否存在
var p = {x:10, y:20};
if ('x' in p) alert('p has property "x"');
if ('y' in p) alert('p has property "y"');
if ('z' in p) alert('p has property "z"');
constructor()
類似C++/JAVA的constructor function。
function Animal() {
}
var bird = new Animal();
alert(bird.constructor == Animal);
alert(bird.constructor == Object);
toString()
每當object要被需要被轉成string時會被呼叫。
valueOf()
每當object需要被轉成primitive type時會被呼叫。
hasOwnProperty()
用以判斷object是否有自己定義properties。
Array
Array算是一種特別的Object,可以透過.或[]存取element。要移除element必須用shift()/pop()/splice()不能用delete。
var a1 = new Array();
a1[0] = "hello";
a1.x = "xx";
alert(a1['x']);
alert(a1[0]);
var a2 = [];
for (var i = 1; i < 10; i++) {
a2[i] = i*i;
}
a2.shift(); // remove first element
a2.pop(); // remove last element.
alert(a2);
a2.splice(5);
alert(a2);
a2['x'] = 'xx';
a2['y'] = 'yy';
alert(a2.length);
a2.length =3;
alert(a2);
a2.length = 5;
alert(a2);
Array.length回傳的是目前用的index最大值+1,index最大值為2^32-1,因此length並不保證有這麼多element,而直接改變index會造成Array的truncating和enlarging。
JavaScript並不支援multi-dimensional array,但是允許element可以是array(array本來就是object的一種)。
var t = new Array(3);
for (var i = 0; i < t.length; i++) {
t[i] = new Array(5);
}
for (var r = 0; r < t.length; r++) {
for( var c = 0; c < t[r].length; c++) {
t[r][c] = r * c;
}
}
alert(t);
Array.join()
將所有的element轉成string之後串在一起。
var a = new Array(1,2,3);
var b = new Array(3);
alert(a.join());
alert(b.join());
Array.reverse()
將所有element順序反轉(reverse the order)。
var a = new Array(1, 2, 3);
alert(a.reverse().join());
Array.sort()
將所有element做排序,可以給sort一個compare function進行排序。
var a = new Array(3, 1, 2);
alert(a.sort().join());
alert(a.sort(function(a, b) { return b - a; }).join());
Array.concat()
將回傳新的Array,包含新的element加上原本array中的element(不會改變原本的array)。
var a = new Array(1, 2, 3);
var a1 = a.concat(4,[5]); // [1, 2, 3, 4, 5]
alert(a1);
var a1 = a.concat([4, [5]]); // [1, 2, 3, 4, [5]]
alert(a1);
Array.slice()
回傳新的Array(不改變原來的array),包含指定的(satrt, end]之element。
var a = new Array(1, 2, 3, 4, 5);
alert(a.slice(1));
alert(a.slice(2,3));
alert(a.slice(-1));
alert(a.slice(-2, 3));
alert(a.slice(2, -3));
alert(a.slice(-2, -3));
Array.splice()
用於insert/remove element。
var a = new Array(1, 2, 3, 4, 5);
a.splice(4);
alert(a);
a.splice(2, 1);
alert(a);
var a = new Array(1, 2, 3, 4, 5);
a.splice(4);
alert(a);
a.splice(2, 1);
alert(a);
var a1 = a.splice(1,2, 'a', 'b'); /* a[1]開始, 取代後面2個, 為'a', 'b' */
alert(a);
alert(a1);
a1 = a.splice(1,0, 'a', 'b'); /* a[1]開始, 取代0個(insert的意思), 為'a', 'b' */
alert(a);
alert(a1);
Array.push()/Array.pop()
從Array後面新增/刪除。
var a = [];
alert(a.push('a'));
alert(a.push('b'));
alert(a.pop());
alert(a.pop());
Array.unshift()/Array.shift()
從Array前面新增/刪除。
var a = [];
alert(a.unshift('a'));
alert(a.unshift('b'));
alert(a.shift());
alert(a.shift());
global/call object
當JavaScript一啟動後,便會建立global object,而所有的全域變數/全域函數都是這個global object的屬性,當呼叫另外一個function時,就會建立call object,區域變數/內部函數也成為這個call object的屬性。