JavaScriptでnull
と見なされるのはなぜですか?object
チェック中
if ( object == null )
Do something
と同じ
if ( !object )
Do something
?
また:
null
とはどう違いundefined
ますか?
JavaScriptでnull
と見なされるのはなぜですか?object
チェック中
if ( object == null )
Do something
と同じ
if ( !object )
Do something
?
また:
null
とはどう違いundefined
ますか?
(name is undefined)
あなた:とは何name
ですか? (*)
JavaScript: name
? とはname
? 何を言っているのかわからない。あなたは今まで何も言及していませんname
。(クライアント) 側で他のスクリプト言語を見ていますか?
name = null;
あなた:とは何name
ですか?
JavaScript:わかりません。
要するに; undefined
ものの概念が存在しない場所です。タイプがなく、そのスコープで以前に参照されたことがない。null
物が存在することが知られている場所ですが、値が何であるかは不明です。
覚えておくべきことの 1 つnull
は、概念的には、型キャスト後に同等であるとしても、またはそのようなものではないということです。つまりfalse
、""
name = false;
あなた:とは何name
ですか?
JavaScript:ブール値 false。
name = '';
あなた:とは何name
ですか?
JavaScript:空の文字列
*:name
このコンテキストでは、定義されていない変数を意味します。これは未定義の変数である可能性がありますが、name はほぼすべての HTML フォーム要素のプロパティです。それはずっと前にさかのぼり、IDのかなり前に制定されました。ID は一意である必要がありますが、名前は一意である必要がないため便利です。
違いは次のスニペットに要約できます。
alert(typeof(null)); // object
alert(typeof(undefined)); // undefined
alert(null !== undefined) //true
alert(null == undefined) //true
チェック中
object == null
確認するのは違いif ( !object )
ます。
! Boolean(object)
単項!
演算子は右側のオペランドをブール値に自動的にキャストするため、後者は と等しくなります。
Boolean(null)
false then に等しいので!false === true
。
したがって、オブジェクトがnullではなく、 falseまたは0または""の場合、次の理由によりチェックに合格します。
alert(Boolean(null)) //false
alert(Boolean(0)) //false
alert(Boolean("")) //false
null
はオブジェクトではなく、プリミティブ値です。たとえば、プロパティを追加することはできません。typeof null
を返すため、オブジェクトであると誤って想定することがあります"object"
。しかし、これは実際にはバグです (ECMAScript 6 で修正される可能性さえあります)。
null
との違いundefined
は次のとおりです。
undefined
: JavaScript で使用され、「値なし」を意味します。初期化されていない変数、欠落したパラメーター、および不明な変数には、その値があります。
> var noValueYet;
> console.log(noValueYet);
undefined
> function foo(x) { console.log(x) }
> foo()
undefined
> var obj = {};
> console.log(obj.unknownProperty)
undefined
ただし、不明な変数にアクセスすると、例外が発生します。
> unknownVariable
ReferenceError: unknownVariable is not defined
null
: プログラマーが「値なし」を示すために使用します。たとえば、関数のパラメーターとして使用されます。
変数を調べる:
console.log(typeof unknownVariable === "undefined"); // true
var foo;
console.log(typeof foo === "undefined"); // true
console.log(foo === undefined); // true
var bar = null;
console.log(bar === null); // true
原則として、JavaScript では常に === を使用し、決して == を使用しないでください (== は、予期しない結果をもたらす可能性のあるあらゆる種類の変換を実行します)。このチェックは、 と の両方でx == null
機能するため、エッジ ケースです。null
undefined
> null == null
true
> undefined == null
true
変数に値があるかどうかを確認する一般的な方法は、それをブール値に変換して、それが であるかどうかを確認することですtrue
。その変換は、if
ステートメントとブール演算子 !によって実行されます。("いいえ")。
function foo(param) {
if (param) {
// ...
}
}
function foo(param) {
if (! param) param = "abc";
}
function foo(param) {
// || returns first operand that can't be converted to false
param = param || "abc";
}
このアプローチの欠点: 以下の値はすべて に評価されるfalse
ため、注意が必要です (たとえば、上記のチェックでは と を区別できませんundefined
) 0
。
undefined
、null
false
+0
、-0
、NaN
""
関数として使用することにより、ブール値への変換をテストできBoolean
ます(通常はコンストラクターであり、 で使用されますnew
):
> Boolean(null)
false
> Boolean("")
false
> Boolean(3-3)
false
> Boolean({})
true
> Boolean([])
true
null と undefined の違いは何ですか??
定義がない場合のプロパティはundefined
です。anull
はオブジェクトです。そのタイプはobject
です。null は「値なし」を意味する特別な値です。 undefined はオブジェクトではなく、その型は未定義です。
変数を宣言して null に設定することができます。動作は同じですが、"null" と "undefined" が表示される点が異なります。未定義の変数を null と比較したり、その逆を比較したりすることもでき、条件は true になります。
undefined == null
null == undefined
詳細については、null と未定義の JavaScript の違いを参照してください。
そしてあなたの新しい編集で はい
if (object == null) does mean the same if(!object)
if が false かどうかをテストするとき、 falseobject
かどうかをテストするときのみ条件を満たしますが、 true のときは条件を満たしません
ここを確認してください:Javascriptの落とし穴
質問の最初の部分:
JavaScriptでnullがオブジェクトと見なされるのはなぜですか?
これはJavaScriptの設計エラーであり、現在修正することはできません。オブジェクト型ではなく、null型であるか、まったくないはずです。実際のオブジェクトを検出するときに追加のチェック(場合によっては忘れられる)が必要であり、バグの原因になります。
質問の2番目の部分:
if (object == null)
Do something
と同じようにチェックしています
if (!object)
Do something
次の場合を除いて、2つのチェックは常に両方ともfalseです。
オブジェクトが未定義またはnull:両方ともtrue。
オブジェクトはプリミティブであり、0 、、、""
またはfalseです。最初にfalseをチェックし、次にtrueをチェックします。
オブジェクトがプリミティブではなく、、、、、などの実際のオブジェクトである場合new Number(0)
、両方のチェックはfalseです。new String("")
new Boolean(false)
したがって、「オブジェクト」が実際のオブジェクトを意味すると解釈される場合、両方のチェックは常に同じです。プリミティブが許可されている場合、チェックは0、、、""
およびfalseで異なります。
のような場合object==null
、明らかでない結果がバグの原因となる可能性があります。の使用==
は推奨されていません===
。代わりに使用してください。
質問の3番目の部分:
また
、nullとundefinedの違いは何ですか?
JavaScriptでは、1つの違いは、nullはobject型であり、undefinedはundefined型であるということです。
JavaScriptでは、null==undefined
はtrueであり、typeが無視された場合は等しいと見なされます。なぜ彼らがそれを決めたのか、しかし0""
とfalseは等しくない、私にはわかりません。恣意的な意見のようです。
JavaScriptではnull===undefined
、タイプはで同じでなければならないため、trueではありません===
。
実際には、nullとundefinedはどちらも存在しないことを表すため、同一です。したがって、0を実行します。""
さらに言えば、空のコンテナ[]
と{}
。同じものの非常に多くの種類は、バグのレシピです。1つのタイプまたはまったくない方が良いです。できるだけ少なくしようと思います。
「false」、「true」、および「!」たとえば、単純化できるワームのもう1つのバッグであり、if(!x)
それif(x)
だけで十分であるため、真と偽は必要ありません。
値が指定されていない場合、宣言されたvar x
タイプは未定義ですが、xがまったく宣言されていない場合と同じである必要があります。もう1つのバグの原因は、空の何もないコンテナです。したがって、のように、一緒に宣言して定義するのが最善var x=1
です。
人々はこれらのさまざまな種類の何もないものすべてを理解しようと円を描いてぐるぐる回っていますが、それは複雑な異なる服ですべて同じことです。現実は
undefined===undeclared===null===0===""===[]==={}===nothing
そして多分すべてが例外を投げるべきです。
typeof null; // object
typeof undefined; // undefined
値 null は、オブジェクト値が意図的に存在しないことを表します。これは JavaScript のプリミティブ値の 1 つであり、ブール演算では偽として扱われます。
var x = null;
var y;
x が宣言され、null として定義されている
y は宣言されていますが、定義されていません。値なしで宣言されているため、未定義です。
z は宣言されていないため、z を使用しようとすると未定義になります。
null と undefined を理解する 1 つの方法は、それぞれがどこで発生するかを理解することです。
次の状況では、null の戻り値が予想されます。
DOM を照会するメソッド
console.log(window.document.getElementById("nonExistentElement"));
//Prints: null
Ajax リクエストから受け取った JSON レスポンス
{
name: "Bob",
address: null
}
流動的な状態にある新しい機能。以下は null を返します。
var proto = Object.getPrototypeOf(Object.getPrototypeOf({}));
// But this returns undefined:
Object.getOwnPropertyDescriptor({}, "a");
存在しない他のすべてのケースは、未定義で示されます(@Axelで指摘されているように)。次の各出力は「未定義」です。
var uninitalised;
console.log(uninitalised);
var obj = {};
console.log(obj.nonExistent);
function missingParam(missing){
console.log(missing);
}
missingParam();
var arr = [];
console.log(arr.pop());
もちろん、 var unitialized = null; と書くことにした場合。または自分でメソッドからnullを返すと、他の状況でnullが発生します。しかし、それはかなり明白なはずです。
3 番目のケースは、変数にアクセスしたいが、それが宣言されているかどうかさえわからない場合です。その場合、 typeof を使用して参照エラーを回避します。
if(typeof unknown !== "undefined"){
//use unknown
}
要約すると、DOM を操作している場合、Ajax を処理している場合、または特定の ECMAScript 5 機能を使用している場合は、null をチェックします。他のすべてのケースでは、 undefined を厳密に同等にチェックするのが安全です:
if(value === undefined){
// stuff
}
JavaScript のさまざまな null チェックの比較:
http://jsfiddle.net/aaronhoffman/DdRHB/5/
// Variables to test
var myNull = null;
var myObject = {};
var myStringEmpty = "";
var myStringWhiteSpace = " ";
var myStringHello = "hello";
var myIntZero = 0;
var myIntOne = 1;
var myBoolTrue = true;
var myBoolFalse = false;
var myUndefined;
...trim...
http://aaron-hoffman.blogspot.com/2013/04/javascript-null-checking-undefined-and.html
このページの JavaScript Definitive Guide 6th Edition、p.41から、との違いは何ですかundefined
null
の回答に追加するには:
undefined
システムレベル、予期しない、またはエラーのような値の欠如null
を表し、プログラムレベル、通常、または予期される値の欠如を表すと考えることができます。これらの値の 1 つを変数またはプロパティに割り当てたり、これらの値の 1 つを関数に渡したりする必要がある場合null
は、ほとんどの場合正しい選択です。
null と undefined は、値が等しい場合 (null==undefined) はどちらも false です。どちらも boolean false に折りたたまれます。それらは同じオブジェクトではありません (null!==未定義)。
undefined はグローバル オブジェクト (ブラウザでは「ウィンドウ」) のプロパティですが、プリミティブ型であり、オブジェクト自体ではありません。これは、return ステートメントなしで終了する、初期化されていない変数と関数の既定値です。
null は Object のインスタンスです。null は、空の結果を示すコレクション オブジェクトを返す DOM メソッドに使用されます。これは、エラーを示さずに false 値を提供します。
たとえば、window.someWeirdProperty
未定義なので、
"window.someWeirdProperty === null"
false と評価される
"window.someWeirdProperty === undefined"
true と評価されます。
さらに、checkifはbeingのチェックとif (!o)
同じではありません。if (o == null)
o
false
2.Undefined は型そのものですが、Null はオブジェクトです。
3.Javascript自体は、割り当てられていない変数を未定義に初期化できますが、変数の値をnullに設定することはできません。これはプログラムで行う必要があります。
null
はオブジェクトです。その型は null です。undefined
オブジェクトではありません。その型は未定義です。
未定義と比較して、null のもう 1 つの楽しい点は、インクリメントできることです。
x = undefined
x++
y = null
y++
console.log(x) // NaN
console.log(y) // 0
これは、カウンターのデフォルトの数値を設定するのに役立ちます。宣言で変数を -1 に設定したことが何回ありますか?
Nicholas C. Zakas 著「The Principles of Object-Oriented Javascript」より
しかし、型が null の場合、なぜオブジェクトなのでしょうか? (実際、これは JavaScript の設計と保守を行う委員会である TC39 によってエラーとして認められています。null は空のオブジェクト ポインターであり、"object" は論理的な戻り値であると考えることができますが、それでも混乱を招きます。)
ザカス、ニコラス C. (2014-02-07)。オブジェクト指向 JavaScript の原則 (Kindle Locations 226-227)。スターチプレスなし。キンドル版。
それは言った:
var game = null; //typeof(game) is "object"
game.score = 100;//null is not an object, what the heck!?
game instanceof Object; //false, so it's not an instance but it's type is object
//let's make this primitive variable an object;
game = {};
typeof(game);//it is an object
game instanceof Object; //true, yay!!!
game.score = 100;
未定義のケース:
var score; //at this point 'score' is undefined
typeof(score); //'undefined'
var score.player = "felix"; //'undefined' is not an object
score instanceof Object; //false, oh I already knew that.
null を使用して何かを値を持たないと定義し、何かがまったく定義されていない可能性があると予想される場合は undefined を使用します。
たとえば、変数に値がない場合は、null として割り当てます。
var weDontHaveAValue = null;
オプションのオプション引数など、何かがまったく定義されていないことが予想される場合は、undefined を使用してください。
if (typeof args.optionalParam !== 'undefined') { }