この理由がよく理解できません。次のコードでは、アイテムの は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
最初のケースでは、trueiffooが定義されていないかfoo、 isの値になりますundefined。
true2 番目のケースでは、 が定義されている場合にのみ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チェックは同じではありません。