3

Javascriptでは、myObject == null未定義とnullのチェックを処理する有効な方法はありますか?

JSLintは私がそうすることを好むでしょう(myObject === undefined || myObject === null)

ダグ・クロックフォードは何をしますか? (WWDCD)

4

3 に答える 3

5

はい、それは両方を確認する良い方法です。言語仕様には次のように記載==されています(異なるタイプの値の比較に関して):

2) x が null で y が定義されていない場合は、true を返します。

3) x が未定義で y が null の場合、true を返します。

ここで、 xyは比較の項ですx == y。を比較する場合、が、またはそれ自体x == nullである場合にのみ true になります。xundefinednull


明確にするために、ここで「未定義」と言うときは、undefined定義されていない変数ではなく、値を意味します (これらは、 を除いて、使用されるたびに ReferenceError を生成しますtypeof)。


WWDCD に関しては、Ian の言葉を引用します。Crockford は、JSLint が (明らかに) 示唆していることを提案します。それは「使用する===、決して使用しない==」という意味です。したがって、これは彼にとって問題ではありません。

于 2013-08-08T23:46:59.963 に答える
2

myObject == null未定義とnullのチェックを処理する有効な方法はありますか?

はい。仕様で定義されているように、等しい値は と の 2 つだけnullです。undefinednull

JSLintは私がそうすることを好むでしょう(myObject === undefined || myObject === null)

それではあなたの意図が理解できません。初めてではありません。または、それ (およびその作成者 Crockford) は、明示的なコードを記述して、Javascript の内部構造をすべて知っているわけではないすべての人が正しく理解できるようにすることを望んでいます。

于 2013-08-08T23:52:19.623 に答える
1

このコードの実行:

<html>
<head>
<script type="text/javascript">
function test() {
    var variable = undefined;

    if (typeof variable === 'undefined') console.log("variable is undefined");
    if (variable == null) {
        console.log("variable is null");
    } else {
        console.log("variable is not null");
    }
}
</script>
</head>
<body onLoad="test()">
</body>

出力を返しました

variable is undefined
variable is null

だから...それはうまくいくようです。しかし、null と undefined について奇妙なことを覚えているようです。あるいは、それは別の言語だったのかもしれません。しばらくすると、それらはぼやけ始めます。

いずれにせよ、@collapsar が提供した答えは、すべてのケースをチェックするため、おそらく最もクリーンな方法です。

于 2013-08-08T23:44:45.277 に答える