2015-07-20 42 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