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
EDIT
typeof out == "null" // false
typeof out == "undefined" // false
typeof out == "object" // true
[typeof](http://es5.github.com/#x11.4.3)演算子は文字列を返すので、 'typeof == null'は決してtrueになりません。可能な結果(「文字列」、「オブジェクト」など)の1つに対してテストする必要があります。 '=='または '==='を使用するかどうかは、どちらもString型であるため違いはありません。 –
RobG
タプルがあるときとないときに、* out *にアキングされる実際の値はどれくらいですか? [letオペレータ](https://developer.mozilla.org/ja/JavaScript/Reference/Statements/let)についても読んでみてください.JavaScriptではなくECMAScriptです。 gnome-shellはどちらに基づいていますか? – RobG
@RobG、タプルがあるとき、 'out'はそれらのタプルを含む文字列です。存在しないときは、 'out'への参照は、gnome-shellをクラッシュさせます。私はgnome-shellは、完全に動作するgnome-shell拡張から上記のステートメントをコピーしたので、JavaScriptに基づいていると思います。 –