两个不同的输出使用+ vs,连接方法

cha*_*ite 6 javascript concatenation

在MDN网站上处理此示例时,解释了过滤方法:

var arr = [
  { id: 15 },
  { id: -1 },
  { id: 0 },
  { id: 3 },
  { id: 12.2 },
  { },
  { id: null },
  { id: NaN },
  { id: 'undefined' }
];

var invalidEntries = 0;

function isNumber(obj) {
  return obj!== undefined && typeof(obj) === 'number' && !isNaN(obj);
}

function filterByID(item) {
  if (isNumber(item.id)) {
    return true;
  } 
  invalidEntries++;
  return false; 
}

var arrByID = arr.filter(filterByID);

console.log('Filtered Array\n', arrByID); 
// Filtered Array
// [{ id: 15 }, { id: -1 }, { id: 0 }, { id: 3 }, { id: 12.2 }]

console.log('Number of Invalid Entries = ', invalidEntries); 
// Number of Invalid Entries = 4
Run Code Online (Sandbox Code Playgroud)

这会在FireBug中获得输出,如预期的那样:

Filtered array

[Object { id=15}, Object { id=-1}, Object { id=0}, Object { id=3}, Object { id=12.2}]
Number of Invalid Entries: 4
Run Code Online (Sandbox Code Playgroud)

但我最初,错误但有意地键入了第一个console.log(); 声明如下:

  console.log('Filtered array\n' + arrById);
Run Code Online (Sandbox Code Playgroud)

并获得此FireBug输出:

Filtered array
[object Object],[object Object],[object Object],[object Object],[object Object]

Number of Invalid Entries: 4
Run Code Online (Sandbox Code Playgroud)

为什么不同的输出?

com*_*nux 4

连接obj 上的+调用toString方法,因此返回字符串“object”,而不是像使用,console.log() 输出的 to concat 返回的那样返回 obj 属性(名称:值)。