2012-03-16 34 views
1

我正在爲gnome-shell編寫擴展。 javascript擴展生成一個sql查詢並捕獲標準輸出上的輸出。在sql查詢計算爲0元組/記錄的情況下,我的擴展崩潰了。將不包含任何內容的javascript對象轉換爲字符串

下面是代碼片段。

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。該對象不是null;也不是未定義的。

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

編輯

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

[typeof](http://es5.github.com/#x11.4.3)運算符返回一個字符串,所以'typeof == null'永遠不會成立。您應該測試其中一種可能的結果(「字符串」,「對象」等)。無論你使用'=='還是'==='都沒有區別,因爲兩者都是String類型。 – RobG 2012-03-16 04:34:16

+0

有元組時有什麼實際的值被排除*有元組,什麼時候沒有?您可能還想了解[let operator](https://developer.mozilla.org/en/JavaScript/Reference/Statements/let),它是JavaScript而不是ECMAScript。哪個是基於gnome-shell的? – RobG 2012-03-16 05:34:15

+0

@RobG,當有元組時,'out'是包含這些元組的字符串。當沒有時,任何對'out'的引用都會使gnome-shell崩潰。我認爲gnome-shell基於JavaScript(將得到證實),因爲我從一個完美的gnome-shell擴展中複製了上述語句。 – 2012-03-16 06:05:29

回答

0

我發現我可以阻止崩潰,如果我做了以下

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。

相關問題