簡體   English   中英

為什么在使用Spidermonkey時輸出為[object Object]而不是[Id:id_value]

[英]Why am i getting output as [object Object] instead of [Id: id_value] when using 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; } 

當我運行以下命令時:

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 }

那么,我該如何糾正呢?

如果您可以控制對象的打印位置,請在打印之前嘗試在對象上使用JSON.stringify

可能這可能有效(未經測試):

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

與其他答案一樣,JSON通常是細讀簡單對象內容的有用且快速的方法。 但是,如果要自定義每個對象的輸出(例如,當使用復雜的對象,工廠,類...時),或者如果要直接使用console.log ,則應實現toString()方法:

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

person
//=> [Id: 123]

請注意,JS外殼的行為各不相同。 例如,雖然您的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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM