为什么我在使用Spidermonkey时输出为[object Object]而不是[Id:id_value]

时间:2016-01-04 13:53:32

标签: javascript spidermonkey

我在mac终端上使用vi编辑器并编写了一些Javascript代码。当我使用Spidermonkey Engine运行此代码时:



function getPerson(id) {
  if (id < 0) {
    throw new Error('ID must not be negative: '+id);
  }
  return { id: id };
}

function getPersons(ids) {
  var result = [];
  ids.forEach(function (id) {
    try {
      var person = getPerson(id);
      result.push(person);
    } catch (exception) {
      print(exception);
  }
});
return result;
}
&#13;
&#13;
&#13;

当我运行以下命令时:

js -f exc.js -i
js> getPersons([1,-2,3]);

我收到以下回复:

Error: ID must not be negative: -2
[object Object],[object Object]

而不是:

Error: ID must not be negative: -2
{ id: 1 }, { id: 3 }

那么,我该怎么纠正这个?

2 个答案:

答案 0 :(得分:0)

如果您可以控制对象的打印位置,请在打印对象之前尝试使用JSON.stringify

这可能有效(未经测试):

js> JSON.stringify(getPersons([1,-2,3]));

答案 1 :(得分:0)

JSON,就像在另一个答案中一样,通常是一种有用而快速的方法来仔细阅读简单对象的内容。但是,如果要自定义每个对象的输出(例如,在使用复杂对象,工厂,类......时),或者如果要直接使用console.log,则应实现toString()方法:< / p>

var person = {
  id: 123,
  toString: function() {
    return '[Id: ' + this.id + ']'
  }
};

person
//=> [Id: 123]

请注意,JS shell的行为会有所不同。例如,虽然您的JS shell似乎调用toString()来打印值(默认的toString()实现返回[object Object]),但Node.js将具有“更有帮助”的行为,类似于漂亮打印对象,变量和函数以原生的方式:

> console.log(person)
{ id: 123 }

即使我的本地版本的SpiderMonkey也有不同的行为:

js> person
({id:123})

因此,不要依赖此输出来获得强大的功能。如果你想在SpiderMonkey中隐式可靠地调用toString(),可以使用旧的字符串强制:

js> ''+person
"[Id: 123]"

print()功能:

js> print(person)
[Id: 123]