【问题标题】:Converting javascript object which contains nothing to a string将不包含任何内容的javascript对象转换为字符串
【发布时间】:2012-03-16 04:13:40
【问题描述】:

我正在为 gnome-shell 编写一个扩展。 javascript 扩展产生一个 sql 查询并在标准输出上捕获输出。在 sql 查询计算为 0 个元组/记录的情况下,我的扩展程序崩溃了。

下面是代码sn-p。

let [success, out, err, error] = GLib.spawn_sync(null, ["sqlite3", "-line", places, sqlQuery], null, 4, null);
let result = out.toString(); // Crashing here for 0 tuples. I was expecting 'result = ""'

我是一个 JavaScript 新手。我不明白在这种情况下应该如何处理对象out。对象不为空;也不是未定义的。

typeof out == null // false
typeof out == undefined // false
typeof out == "object" // true

编辑

typeof out == "null" // false
typeof out == "undefined" // false
typeof out == "object" // true

【问题讨论】:

  • typeof 运算符返回一个字符串,因此typeof <anything> == null 永远不会为真。您应该针对其中一种可能的结果(“字符串”、“对象”等)进行测试。无论您使用 == 还是 === 都没有区别,因为两者都是 String 类型。
  • 当有元组和没有元组时,分配给 out 的实际值是多少?您可能还想了解let operator,它是 JavaScript 但不是 ECMAScript。 gnome-shell 基于哪个?
  • @RobG,当有元组时,'out' 是包含这些元组的字符串。如果没有,任何对“out”的引用都会使 gnome-shell 崩溃。我认为 gnome-shell 是基于 JavaScript(将确认),因为我从一个完美运行的 gnome-shell 扩展中复制了上述语句。

标签: javascript gnome-shell


【解决方案1】:

我发现如果我执行以下操作可以防止崩溃

let [success, out, err, errno] = GLib.spawn_sync(null, ["sqlite3", "-line", places, sqlQuery], null, 4, null);
if (out.length > 0) {
        let records = out.toString().split('\n\n');
}

我不明白为什么out.toString() 不能给我一个空字符串而不是崩溃。希望当我了解更多有关 javascript 和 glib 的知识时,我会这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-06
    • 1970-01-01
    • 1970-01-01
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多