なぜヌルはオブジェクトであり、ヌルと未定義の違いは何ですか?
-
03-07-2019 - |
質問
なぜ null
はJavaScriptの 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
は、定義されていない変数を意味します。未定義の変数でも構いませんが、名前はほぼすべてのHTMLフォーム要素のプロパティです。それはずっと先に進み、idのかなり前に制定されました。 IDは一意である必要がありますが、名前は一意である必要がないため、便利です。
他のヒント
違いは次のスニペットに要約できます:
alert(typeof(null)); // object
alert(typeof(undefined)); // undefined
alert(null !== undefined) //true
alert(null == undefined) //true
確認
object == null
は、 if(!object)
をチェックする場合とは異なります。
後者はと同じです!ブール(オブジェクト)
。単項!
演算子が自動的に正しいオペランドをブールにキャストするためです。
Boolean(null)
はfalseに等しいため、!false === true
。
オブジェクトが nullではないの場合、しかし false または 0 または"&quot ; 、チェックに合格します 理由:
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
ステートメントとブール演算子!によって実行されます。 (“ not”)。
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の違いは何ですか?
プロパティが定義されていない場合、プロパティは未定義です。 nullはオブジェクトです。そのタイプはオブジェクトです。 nullは、値がないことを意味する特別な値です。 undefinedはオブジェクトではなく、型は未定義です。
変数を宣言し、nullに設定できます。動作は" null"が表示されることを除いて同じです。印刷されたものと「未定義」未定義の変数とnullまたはその逆を比較することもでき、条件は真になります。
undefined == null
null == undefined
JavaScriptを参照詳細については、nullとundefinedの違い。
そして新しい編集 はい
if (object == null) does mean the same if(!object)
オブジェクトがfalseであるかどうかをテストするとき、両方とも false であるかどうかをテストするときのみ条件を満たしますが、trueのときは満たしません
こちらで確認: Javascript gotcha
質問の最初の部分:
nullがJavaScriptのオブジェクトと見なされる理由
これは、現在修正できないJavaScriptの設計エラーです。オブジェクト型ではなく、null型であるか、まったくない必要があります。実際のオブジェクトを検出する際に、追加のチェックが必要になる場合がありますが、バグの原因となります。
質問の2番目の部分:
チェックしています
if(object == null)
何かをする
と同じ
if(!object)
何かをする
次の場合を除き、2つのチェックは常に両方ともfalseです。
-
オブジェクトが未定義またはnull:両方とも真です。
-
オブジェクトはプリミティブであり、0、
""
、またはfalse:最初はfalseをチェックし、2番目はtrueです。
オブジェクトがプリミティブではなく、 new Number(0)
、 new String("")
、またはなどの実際のオブジェクトの場合new Boolean(false)
、両方のチェックがfalseです。
「オブジェクト」が実際のオブジェクトを意味すると解釈される場合、両方のチェックは常に同じです。プリミティブが許可される場合、チェックは0、""
、およびfalseで異なります。
object == null
などの場合、明白でない結果がバグの原因になる可能性があります。 ==
の使用は推奨されていません。代わりに ===
を使用してください。
質問の3番目の部分:
また:
nullとundefinedの違いは何ですか?
JavaScriptの違いの1つは、nullがオブジェクト型であり、undefinedがundefined型であることです。
JavaScriptでは、 null == undefined
はtrueであり、タイプが無視される場合は等しいと見なされます。なぜ彼らがそれを決めたのか、しかし、0、""
とfalseは等しくない、私は知らない。それはarbitrary意的な意見のようです。
JavaScriptでは、 ===
でタイプが同じでなければならないため、 null === undefined
はtrueではありません。
実際には、nullとundefinedはどちらも存在しないことを表すため、同一です。したがって、0、および""
も同様です。空のコンテナ []
および {}
の場合もあります。同じ何もないので、多くのタイプはバグのレシピです。 1つのタイプ、またはまったくなしの方が優れています。できるだけ使用しないようにします。
「false」、「true」、および「!」たとえば、 if(!x)
と if(x)
だけで十分な場合、単純化できるワームの別のバッグです。trueとfalseは必要ありません。
値が指定されていない場合、宣言された var x
はundefined型ですが、xがまったく宣言されていない場合と同じである必要があります。別のバグのソースは、空の空のコンテナです。したがって、 var x = 1
のように、一緒に宣言して定義するのが最善です。
人々は、これらのさまざまな種類のすべてを把握しようとして、ぐるぐる回っていますが、複雑な異なる服を着ても同じことです。現実は
undefined===undeclared===null===0===""===[]==={}===nothing
そして、おそらくすべてが例外をスローするはずです。
var x = null;
xはnullとして定義されています
yは定義されていません。 //定義しなかったため
if (!x)
nullはfalseと評価されます
nullおよび未定義の意味を理解する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 unitialised = null;と書くことにした場合。または自分でメソッドからnullを返すと、他の状況でnullが発生します。しかし、それはかなり明白なはずです。
3番目のケースは、変数にアクセスしたいが、宣言されているかどうかさえわからない場合です。その場合、typeofを使用して参照エラーを回避します。
if(typeof unknown !== "undefined"){
//use unknown
}
要約では、DOMを操作しているとき、Ajaxを処理しているとき、または特定のECMAScript 5機能を使用しているときにnullをチェックします。他のすべての場合、厳密な等式で未定義をチェックしても安全です:
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
nullとundefinedはどちらも値が等しい場合はfalseです(null == undefined):これらは両方ともブールfalseになります。それらは同じオブジェクトではありません(null!== undefined)。
undefinedはグローバルオブジェクト(ブラウザの「ウィンドウ」)のプロパティですが、プリミティブ型であり、オブジェクト自体ではありません。これは、returnステートメントなしで終了する初期化されていない変数および関数のデフォルト値です。
nullはObjectのインスタンスです。 nullは、空の結果を示すコレクションオブジェクトを返すDOMメソッドに使用され、エラーを示すことなくfalse値を提供します。
一部の精度:
nullと未定義の は2つの異なる値です。 1つは名前に値がないことを表し、もう1つは名前がないことを表します。
if
で何が起こるかは、 if(o)
について次のようになります。
かっこ内の式が評価され、次に if
が起動し、かっこ内の式の値を型強制します-この例では o
Falsy(falseに強制される)値は、 ''、null、undefined、0、およびfalse です。
undefined
と null
の違いは何ですか? //books.google.com/books?id=6TAODdEIxrgC&lpg=PA41&ots=obbpJPKzZH&dq=null%20undefined&pg=PA41#v=onepage&q=null%20undefined&f=false "rel =" nofollow ">このページ:
undefined
は、システムレベルの予期しない、 またはエラーのような値の欠如とプログラムレベルを表すnull
、 通常、または期待される価値の欠如。のいずれかを割り当てる必要がある場合 これらの値を変数またはプロパティに渡すか、これらの値のいずれかを 関数、null
はほとんどの場合正しい選択です。
次の関数は、その理由を示し、違いを解決する能力があります。
function test() {
var myObj = {};
console.log(myObj.myProperty);
myObj.myProperty = null;
console.log(myObj.myProperty);
}
電話する場合
test();
取得しています
未定義
null
最初の console.log(...)
は、まだ定義されていない間に myObj
から myProperty
を取得しようとします。戻る" undefined"。 nullを割り当てた後、2番目の console.log(...)
は明らかに" null"を返します。 myProperty
は存在するが、値 null
が割り当てられているため。
この違いを照会できるようにするため、JavaScriptには null
と undefined
があります。 null
は-他の言語と同様に、オブジェクト、 undefined
は使用可能なインスタンスがないため( null
インスタンスでなくても)オブジェクトにはできません。
null
はオブジェクトです。タイプはnullです。 undefined
はオブジェクトではありません。そのタイプは未定義です。
たとえば、 window.someWeirdProperty
は未定義なので、
" window.someWeirdProperty === null"
はfalseに評価されます
" window.someWeirdProperty === undefined"
はtrueと評価されます。
さらにcheckif if(!o)
は、 o
がであるかどうかを
。 if(o == null)
で確認することとは異なります。 false
nullのもう1つの面白い点は、未定義と比較して、nullをインクリメントできることです。
x = undefined
x++
y = null
y++
console.log(x) // NaN
console.log(y) // 0
これは、カウンターのデフォルトの数値を設定するのに役立ちます。宣言で変数を-1に設定した回数は何回ですか?
Javascript では、 null
は object
型ではなく、 primitave
型です。
違いは何ですか
未定義は、設定されていないポインターを指します。
Null はNULLポインターを指します。たとえば、何かが手動で変数を null
これを見てください:
<script>
function f(a){
alert(typeof(a));
if (a==null) alert('null');
a?alert(true):alert(false);
}
</script>
//return:
<button onclick="f()">nothing</button> //undefined null false
<button onclick="f(null)">null</button> //object null false
<button onclick="f('')">empty</button> //string false
<button onclick="f(0)">zero</button> //number false
<button onclick="f(1)">int</button> //number true
<button onclick="f('x')">str</button> //string true
「「オブジェクト指向Javascriptの原則」」からニコラス・C・ザカス
しかし、なぜ型がnullのときにオブジェクトなのか? (実際、これはJavaScriptの設計と保守を行う委員会であるTC39によってエラーとして認められています。nullは空のオブジェクトポインターであり、「オブジェクト」を論理的な戻り値にすることができますが、それでも紛らわしい。)
ザカス、ニコラス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」について考える最良の方法は、データベースで同様の概念がどのように使用されているかを思い出すことです。
- はい、アイテムの値は既知です。それは 「定義済み」です。初期化された 。
- アイテムの値は次のとおりです。&quot;値はありません。&quot;
これは、デバッグがより簡単なプログラムを作成するための非常に便利な手法です。 「未定義」変数はバグの結果かもしれません... (どうやって知っていますか?) ...しかし、変数に値「null」が含まれている場合、&quot; someone、このプログラムのどこかで、「」を「null」に設定します&quot;したがって、変数の値を取り除く必要がある場合は、「削除」しないでください。 ...「null」に設定します。古い値は孤立し、まもなくガベージコレクションされます。新しい値は「値がありません(現在)」です。どちらの場合でも、変数の状態は確実です:&quot;それは明らかに、故意に、そのようになった。&quot;
- 未定義とは、変数は宣言されているが値が割り当てられていないことを意味し、Nullは「値なし」を表す変数に割り当てることができます。(Nullは代入演算子です)
2.Undefinedは型そのものですが、Nullはオブジェクトです。
3.Javascript自体は、未割り当ての変数を未定義に初期化できますが、変数の値をnullに設定することはできません。これはプログラムで行う必要があります。