【问题标题】:Why is the output always [object Object]?为什么输出总是[object Object]?
【发布时间】:2014-10-24 15:37:29
【问题描述】:
var dev = [device.id](or null);

function console(stdout){$('#console').text(stdout)}

function adbShell(command){
if(dev==null){throw Error('adb >No KFSOWI detected')}
client.shell(dev,command)
 .then(function(output){console(output)})
};

我正在尝试创建一个函数来运行 adb shell 命令,并将输出返回到控制台,但我得到的唯一返回是 [object Object]

【问题讨论】:

  • 我假设输出是一个对象,你可能需要把它封装在JSON.stringify();

标签: javascript android adb node-webkit node-modules


【解决方案1】:

这是因为"" + {} - 任何未定义toString 的对象的字符串化 - 导致"[object Object]"。在这种情况下,转换为字符串可能发生在 .text 函数中。

正如 meanIOstack 所建议的,可能使用JSON.stringify 创建一个“更有用”的字符串是有意义的。例如;

function console (obj) {
   var str = typeof obj === "string" ? obj : JSON.stringify(obj)
   $('#console').text(str)
}

另一方面,“真正的问题”可能是output 没有评估为预期值;至少上面的函数可以更好地了解返回的什么

【讨论】:

  • 我希望我能说这行得通。结果相同。我以前遇到过这个问题并解决了它,但不记得如何了。我设法得到了不同的结果,但现在它始终为空。值得一提的是,这个问题主要与 adbkit 节点模块有关
  • @KyleBerries 如果这会产生相同的结果,那么 [ToString] 会在调用控制台之前的早期发生。但应用相同的方法;序列化对象 [to JSON] 之前 它被用作 / 隐式转换为文本,以便它可以正确表示为文本。
  • 您能解释一下导致这个问题的原因吗?我在不同的场景中遇到了同样的问题。上面的答案可能是一个很好的解释,但我不明白。 IE。 ""+{}
  • 对象的默认[ToString] (as handled through toString) 非常原始,很少有用。此 [ToString] 以及 toString 过程在 "" + anyObject 的情况下完成。
猜你喜欢
  • 1970-01-01
  • 2016-06-16
  • 1970-01-01
  • 1970-01-01
  • 2021-12-16
  • 2011-01-12
  • 2011-04-16
  • 1970-01-01
  • 2019-05-18
相关资源
最近更新 更多