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的屬性。
沒有留言:
張貼留言