この理由がよく理解できません。次のコードでは、アイテムの はundefinedlocalStorage
として警告されますが、構文を使用すると機能しません。誰かが問題を説明できますか。ありがとうございました。if(x==undefined)
alert(localStorage["x"]);
if(localStorage["x"]=="undefined"){alert("y");}
一番上の行のアラートは未定義です
一番下の行は、私にとってyを警告しません。
この理由がよく理解できません。次のコードでは、アイテムの はundefinedlocalStorage
として警告されますが、構文を使用すると機能しません。誰かが問題を説明できますか。ありがとうございました。if(x==undefined)
alert(localStorage["x"]);
if(localStorage["x"]=="undefined"){alert("y");}
一番上の行のアラートは未定義です
一番下の行は、私にとってyを警告しません。
string は含まれず"undefined"
、 type の値が含まれますundefined
。
if (localStorage["x"] == undefined) { alert("y"); }
undefined
古いブラウザでは値が変更される可能性があるため、代わりに型を確認することをお勧めします。
if (typeof localStorage["x"] == 'undefined') { alert("y"); }
試す:
if(typeof( localStorage["x"]) == 'undefined'){alert("y");}
また
if( localStorage["x"] == undefined){alert("y");}
また
if( !localStorage["x"] ){alert("y");}
何かが存在するかどうかを確認するには、次の 2 つの方法がありundefined
ます。
typeof foo === "undefined"
と
foo === undefined
最初のケースでは、true
iffoo
が定義されていないかfoo
、 isの値になりますundefined
。
true
2 番目のケースでは、 が定義されている場合にのみfoo
(それ以外の場合は壊れます) 、その値はundefined
です。
文字列に対してその値をチェックすること"undefined"
は、まったく同じではありません!
アップデート:
定義されていないオブジェクト リテラルのプロパティに対して操作を実行しようとすると、それがまったく定義されていないことを意味していたと思います。つまり、次のようなことを意味していました。
obj["x"].toLowerCase()
// or
obj["x"]["y"]
元々あるものにアクセス/操作しようとしている場所undefined
。この場合、if
オブジェクトリテラルが値を報告する方法のため、ステートメントで比較するだけで問題ありませんが、通常の Javascript 変数とは大きく異なります。
オブジェクト リテラルでは、キー ("x" など) が定義されていない場合、
obj["x"]
は の値を返すundefined
ので、typeof
と 基本=== undefined
チェックの両方が機能し、 になりますtrue
。
定義されていない、または値を持っているという全体的な違いはundefined
、通常の変数とは異なります。
あなたが持っていた場合:
var a;
// or
var a = undefined;
その後、以前に提供したtypeof
と 基本的な=== undefined
チェックの両方が機能し、true
. しかし、宣言さえしていない場合はa
、typeof
チェックのみが機能し、true
. === undefined
チェックは壊れます。
見てみましょう: http://jsfiddle.net/7npJx/
コンソールで気付くと、ステートメントb is not defined
が壊れています。if
基本的に でオブジェクトリテラルを見ているのでlocalStorage
、アイテムが定義されていないか、値が であるかを区別する方法は、最初undefined
に使用することです。in
したがって、次を使用できます。
if (!("x" in localStorage)) {
「x」が定義済みのプロパティではないかどうかを確認し、次のようにします。
else if (localStorage["x"] === undefined) {
次に、定義されているが値が であるかどうかを確認しますundefined
。次に、以下を使用します。
else {
localStorage["x"]
は定義済みであり、値を持たないことを意味しますundefined
。
ただし、オブジェクト リテラルが定義されていないプロパティを報告する方法があるため、(知りたい内容に基づいて)typeof
またはチェックをコードで使用してもかまいません。in
基本を使用すること=== undefined
も問題ありませんが、Guffaが指摘したように、実際の値undefined
が上書きされる可能性があり、この比較では機能しません。通常の Javascript 変数に関してはtypeof
、=== undefined
チェックは同じではありません。