私は非常に単純な状況があり、困惑しています。私は、明示的なhttp get関数にパラメータを渡しています。クエリで使用されているので、数値であることを確認しています(SQLインジェクションから安全です)。未定義の数字(文字列からのキャスト)ヌルチェックが終了しました
クライアントのデータ構造上、これらの数値は文字列に変換されます。だから私は誤って数字の代わりに文字列を渡した。 invoiceIdが未定義に評価され、クエリが失敗したため、アプリケーションが正常に動作しませんでした。
これを防ぐために、私はヌルチェックを追加しました。以下は実際の例です(文字列を数値にキャストするコンパイルエラーはありません):
(値が文字列値 "undefined"として渡されていたことに注意してください。まだtypescriptですがinvoiceIdが、それは数あるべきな文字列値であるかどうかをチェックするから私を禁止としてそれをキャッチすることができないという問題を持っている。私はis
施行タイプを想定し!)
class IBadInput { value: any };
var badInput = { value: "undefined" } as IBadInput;
var invoiceId = badInput.value as number;
if (typeof invoiceId == 'undefined' || invoiceId == null)
{
console.log("inoice id not provided");
}
console.log("getting for invoice", invoiceId);
しかし、どこ状況に文字列invoiceIdが提供されますが、invoiceId == null文はトリガーされません。これが出力されます。
getting for invoice undefined
私はそれが「truthy」ですが、すべては、このチェックに合格した者の取得かどうかをチェックするためにinvoiceId == undefined
をチェックしてみました、とtypeof invoiceId == null
だけif(invoiceId)
てきました。
私はそれを捕まえることができますか?
'' typeof invoiceId == 'undefined'''はどうですか? – Ditto
http://stackoverflow.com/questions/27509/detecting-an-undefined-object-property – david25272
私は、あなたが主張していることが実際に起こっている可能性があると信じています。それは本当にあなたのコードがどのように見えるのでしょうか? '=='演算子は、 'undefined'と' null'を等しく扱うように明示的に定義されています。あなたが主張しているのは、あなたのJavaScriptランタイムは、言語の非常に基本的な部分に重大なバグを持ち、それは単に疑わしいと思うということです。 – Pointy