2016-07-05 13 views
0

は、私は、次のイベントハンドラを持っていると仮定しますこれらの未定義の変数がJavaScriptと等しくないのはなぜですか?

function handleCsvDump(e) { 
    console.log(e.currentTarget.getAttribute('download')); 
    e.currentTarget.download = undefined; 
    console.log(e.currentTarget.getAttribute('download')); 
    console.log(e.currentTarget.getAttribute('download') === undefined); 

対応するボタンがクリックされたときにコンソールにログに記録された情報は次のとおりです。

mycsv.csv 
undefined 
false 

なぜ最後の値falseがありますか? e.currentTarget.getAttribute('download')undefinedなので、本当ですか?これが間違った方法である場合、変数が未定義であるかどうかをどのようにテストできますか?

+0

ルック(HTTPS:/あなたが実際にundefined(またはnull)に設定したいによって暗示され、それを削除したい場合は、代わりにremoveAttribute使用することができます/developer.mozilla.org/en-US/docs/Web/API/Element/getAttribute):*のgetAttribute()要素上で指定された属性の値を返します。指定された属性が存在しない場合は、返された値がいずれかの(空の文字列)「」ヌルであるか、でしょう。* –

+2

あなたは、あなたがやったとき、 'ダウンロードは= undefined'が、それはそれを文字列に強制していないことを確認しており、実際には値を '' undefined ''に設定してください。あなたのコンソールログは '' mycsv.csv "、" undefined "、false'または' 'mycsv.csv"、undefined、false'のように見えますか? –

+0

James、コンソールログは 'mycsv.csv'のようでした。 'undefined'、' false'です。引用符はありませんでした。 –

答えて

1

あなたは物事をこのように設定するときに注意する必要があり、多くの場合、物事は文字列であることが予想されている、とあなたが文字列でない値を設定した場合、それは最初に割り当てられ、その後、文字列に強制変換されます。

download attributeは、それがまだない場合、あなたはそれに割り当てる何かが最初の文字列に強制変換されますので、あなたはundefinedを割り当てるときに、それは実際には最初の"undefined"に強制だとそれが格納されていることを意味し、実際のDOMStringです。

あなたが戻ってそれを得る、とundefinedと比較し、あなたが実際にやっている:

console.log("undefined" === undefined) 

は、そこでfalseを得ます。 [のgetAttribute()のドキュメント]で

e.currentTarget.removeAttribute('download') 
関連する問題