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
物が存在することがわかっている場所ですが、値が何であるかは不明です。
覚えておくべき一つのことは、つまりnull
、概念的には、ないと同じfalse
か、""
すなわち、それらは型キャストの後に同一視しても、あるいは、
name = false;
あなた:何name
ですか?
JavaScript:ブール値false。
name = '';
あなた:何name
ですか?
JavaScript:空の文字列
*:name
このコンテキストでは、定義されたことのない変数を意味します。未定義の変数でもかまいませんが、名前は、ほぼすべてのHTMLフォーム要素のプロパティです。それはずっと前に進み、idのかなり前に制定されました。IDは一意である必要がありますが、名前は一意である必要がないため、これは便利です。
null
「何もない」と答えます。Nullは値なしとして正確に定義されています。ボイド、ニル、ナダ。何もない。
name
」というのは本当です。ただし、値を割り当てずに変数を宣言すると(var somevar;
)、驚くほど十分な結果が得られundefined
ます。
違いはこのスニペットに要約できます:
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に等しいので!false === true
。
したがって、オブジェクトがnullではなく、 falseまたは0または""の場合、次の理由でチェックはパスします。
alert(Boolean(null)) //false
alert(Boolean(0)) //false
alert(Boolean("")) //false
String(null)
キャストの別の例を見てみましょう。Number(null + 2)
...のような愚かなこともできますが、すべきではありません:-)。ケンタロミウラからの素晴らしい答え。
typeof
ている演算子です。記述しないのと同じ理由で、オペランドを括弧で囲みませんvar sum = 1 +(1);
。
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
+0
、別の-0
場合は別にし+0 === -0
ますか?
+0
と-0
:1/+0 !== 1/-0
。
nullとundefinedの違いは何ですか?
プロパティが定義されていない場合、プロパティは未定義です。nullはオブジェクトです。そのタイプはオブジェクトです。nullは特別な値で、「値なし。undefinedはオブジェクトではなく、型はundefinedです。
変数を宣言してnullに設定すると、「null」と「undefined」が出力されることを除いて、動作は同じです。未定義の変数をnullと比較したり、その逆を行ったりすることもでき、条件はtrueになります。
undefined == null
null == undefined
詳細については、JavaScriptのnullと未定義の違いを参照してください。
そして、あなたの新しい編集で、 はい
if (object == null) does mean the same if(!object)
テストするときにオブジェクトがfalseの場合、彼らは両方の場合にのみ、テストするときの条件を満たして偽のではなく、真のとき
ここをチェックしてください:Javascriptの落とし穴
null
オブジェクトではありません。typeof null == 'object';
戻って真の理由(現在、将来的に変更される可能性があり)JavaScriptで固定することができないバグのためです。
質問の最初の部分:
nullがJavaScriptのオブジェクトと見なされるのはなぜですか?
これは、現在修正できないJavaScriptの設計エラーです。オブジェクトではなく、nullであるか、まったくない必要があります。実際のオブジェクトを検出するとき、追加のチェック(時には忘れられる)が必要であり、バグの原因となります。
質問の後半:
if (object == null)
Do something
と同じチェックです
if (!object)
Do something
2つのチェックは、次の場合を除いて常に両方ともfalseです。
オブジェクトが未定義またはnullであり、両方とも真です。
オブジェクトはプリミティブで、0 ""
、、またはfalseです。最初はfalse、2番目はtrueです。
オブジェクトがプリミティブではなく、、、のような実際のオブジェクトであるnew Number(0)
場合new String("")
、new Boolean(false)
両方のチェックは偽になります。
したがって、「オブジェクト」が実際のオブジェクトを意味すると解釈される場合、両方のチェックは常に同じです。プリミティブが許可されている場合、チェックは0 ""
、、およびfalseで異なります。
のようなobject==null
場合、明白でない結果がバグの原因になる可能性があります。の使用==
は推奨されていません===
。代わりに使用してください。
質問の3番目の部分:
また
、nullとundefinedの違いは何ですか?
JavaScriptの1つの違いは、nullはオブジェクト型であり、undefinedはundefined型であるということです。
JavaScriptではnull==undefined
trueであり、タイプが無視された場合は等しいと見なされます。なぜ彼らはそれを決定したが、0 ""
とfalseは等しくないのか、私は知らない。それは恣意的な意見のようです。
JavaScriptではnull===undefined
、型はで同じでなければならないため、真ではありません===
。
実際には、nullとundefinedはどちらも存在しないことを表すため、同一です。したがって、0を実行します。さらに""
、空のコンテナ[]
ともそう{}
です。多くの種類の同じものはバグのレシピです。1つのタイプか、まったくないタイプのほうが優れています。なるべく使わないようにします。
「false」、「true」、および「!」たとえば、単純化できるワームの別のバッグであり、if(!x)
それif(x)
だけで十分であり、trueとfalseは必要ありません。
var x
値が指定されていない場合、宣言された型はundefinedですが、xがまったく宣言されていない場合と同じでなければなりません。別のバグソースは、空の何もないコンテナです。したがって、のように、一緒に宣言して定義するのが最善var x=1
です。
人々は、これらのさまざまなタイプのすべてを理解しようとして、ぐるぐる回っていますが、複雑な異なる服を着ていても、同じことです。現実は
undefined===undeclared===null===0===""===[]==={}===nothing
そして、おそらくすべてが例外をスローするはずです。
[]
んが、空の配列は当然のことながら.push()
関数を持っているので、[]がnullであることに対する適切な引数はありません。0.02ドル。
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で示されるように)undefinedで示されます。次のそれぞれが「undefined」と出力します。
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をチェックします。他のすべての場合については、完全に等しいかどうかで未定義をチェックしても安全です。
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とundefined は 2つの異なる値です。1つは名前の値がないことを表し、もう1つは名前がないことを表します。
で何が起こるかはif
次のとおりですif( o )
:
括弧o内の式が評価され、次にif
括弧内の式の値が型強制されます(この場合)o
。
JavaScriptの偽(強制的にfalseになる)値は、''、null、undefined、0、およびfalseです。
答えに追加するには、間differrenceは何undefined
とnull
から、JavaScriptのDefinitive Guideの第6版、このページのP.41:
undefined
システムレベル、予期しない、またはエラーのような値のnull
不在を表すこと、およびプログラムレベル、通常、または予期される値の欠如を表すことを検討する場合があります。これらの値の1つを変数またはプロパティに割り当てるか、これらの値の1つを関数に渡す必要がある場合null
は、ほとんどの場合、これが正しい選択です。
null
オブジェクトです。そのタイプはnullです。undefined
オブジェクトではありません。そのタイプは未定義です。
null
とundefined
プリミティブ値です- typeof null === 'object'
言語のバグである、なぜならObject(null) !== null
次の関数は、理由を示し、違いを解決することができます。
function test() {
var myObj = {};
console.log(myObj.myProperty);
myObj.myProperty = null;
console.log(myObj.myProperty);
}
あなたが呼ぶなら
test();
あなたは得ています
未定義
ヌル
最初console.log(...)
はまだ定義されていないときに取得しようとするためmyProperty
、myObj
「未定義」に戻ります。nullを割り当てた後、2番目console.log(...)
はmyProperty
存在するため明らかに「null」を返しますが、値はnull
割り当てられています。
この違いをクエリできるようにするために、JavaScriptには次のような特徴がnull
ありundefined
ます。:null
が-他の言語と同様に、オブジェクトは使用undefined
できませnull
ん。
たとえば、window.someWeirdProperty
未定義なので、
"window.someWeirdProperty === null"
一方、falseと評価されます
"window.someWeirdProperty === undefined"
trueと評価されます。
またcheckifはif (!o)
チェックと同じではないif (o == null)
ためo
ですfalse
。
これを見てください:
<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
Nicholas C. Zakasによる「The Principles of Object-Oriented Javascript」より
しかし、なぜ型がnullのときにオブジェクトなのでしょうか。(実際、これはJavaScriptを設計および保守する委員会であるTC39によってエラーとして認められています。nullが空のオブジェクトポインターであり、「オブジェクト」が論理的な戻り値になると考えられるかもしれませんが、それでも混乱します。)
ザカス、ニコラスC(2014-02-07)。オブジェクト指向JavaScriptの原則(Kindleロケーション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」について考える最良の方法は、データベースで同様の概念がどのように使用されているかを思い出すことです。これは、フィールドに「値がまったくない」ことを示しています。
これは、デバッグがより簡単なプログラムを作成するのに非常に役立つテクニックです。「未定義」の変数はバグの結果である可能性があります... (どうやって知っていますか?) ...しかし、変数に値「null」が含まれている場合、「このプログラムのどこかで、次のように設定します。 'null。' "したがって、変数の値を削除する必要がある場合は、「削除」しないでください。「null」に設定してください。古い値は孤立し、まもなくガベージコレクションされます。新しい値は、「値はありません(現在)」です。どちらの場合も、変数の状態は確かです。
2.Undefinedはそれ自体が型であり、Nullはオブジェクトです。
3.Javascript自体は、未割り当ての変数を未定義に初期化できますが、変数の値をnullに設定することはできません。これはプログラムで行う必要があります。