2015-07-20 45 views
0

我正在閱讀一本名爲Eloquent Javascript的書。直接將[]添加到對象意味着什麼?

在第6章中,我發現了一個我無法理解的語法,[ ]可以直接添加到一個對象中。

這個用法是什麼意思?

function UnderlinedCell(inner) { 
    this.inner = inner; 
}; 
UnderlinedCell.prototype.minWidth = function() { 
    return this.inner.minWidth(); 
}; 
UnderlinedCell.prototype.minHeight = function() { 
    return this.inner.minHeight() + 1; 
}; 
UnderlinedCell.prototype.draw = function(width, height) { 
    return this.inner.draw(width, height - 1) 
    .concat([repeat("-", width)]); 
}; 

function dataTable(data) { 
    var keys = Object.keys(data[0]); 
    var headers = keys.map(function(name) { 
    return new UnderlinedCell(new TextCell(name)); 
    }); 
    var body = data.map(function(row) { 
     return keys.map(function(name) { 
      return new TextCell(String(row[name])); 
     }); 
    }); 
    return [headers].concat(body); 
} 
+0

我真的不明白你的問題。我沒有看到[](空數組)被添加到任何地方的對象。 – rocktheartsm4l

回答

0

用行return [headers].concat(body);你說變量「headers」是一個數組。這樣你可以調用concat()函數。 您通常不需要括號,但是在這種情況下,您想要將數組「標題」和「主體」連接到新數組「標題」中。

希望我能回答你的問題。

+0

'headers = [] .concat(body)'用'body'替換'header'的值,它不連接兩個數組。 – Barmar

+0

你是對的,我刪除它,謝謝! – Algram

+0

非常感謝! – Andy

0

[]放在變量的周圍意味着創建一個數組,其元素是該變量。這可以隨後被用於

return [headers].concat(body); 

相當於:

var array = []; 
array[0] = headers; 
var new_array = array.concat(body); 
return new_array; 

什麼功能正在做的是返回一個數組,其第一個元素是標題行,並且其餘元件是從body每個數據行。

+0

非常感謝! – Andy