2016-09-15 58 views
1

任何人都可以解釋RegExp.prototype.exec的結果是如何產生的嗎?Array中的非索引屬性

如果你嘗試類似的東西:/d/g.exec("d is a character, dd")結果數組結構如下解釋:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec

我的問題是,如何陣列已非indexeed像indexinput屬性?

通常情況下,數組是一個由整數索引的集合([0...n]);

var re = /d/g; 
 
var str = "domains are always domains"; 
 

 
var result = re.exec(str); 
 

 
console.log("typeof result", typeof result); 
 
console.log("Array.isArray(result)", Array.isArray(result)); 
 
console.log("result.length", result.length); 
 
console.log("result", result);

回答

3

數組是隻是一個對象。事實上,你可以進行簡單的陣列狀物體就是這樣:

var fakeArr = {} 
fakeArr[0] = 'foo'; 
fakeArr[1] = 'bar'; 
fakeArr.length = 2; 

區別於普通對象的數組的唯一的事情是.length屬性的行爲和Array.prototype的各項具體陣列的方法。

+0

我不認爲這是,或者至少,這不是全部。例如,什麼'Array.isArray(fakeArr)'返回? – Hitmands

+0

'isArray'將返回'false',因爲它檢查對象是否從'Array'繼承,在這種情況下它顯然不會。這就是爲什麼我說* array-like *。還有其他類似數組的對象,例如['arguments'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments)(正式記錄爲*陣列狀*)。這意味着你可以像數組一樣迭代它('for(var i = 0; i deceze

+1

是的,這確實就是它的全部。數組是一個普通對象+一些額外的屬性和方法。 – deceze