回答:
typeof
未定義の変数に対して安全に演算子を使用できます。
nullを含む値が割り当てられている場合、typeofはundefined以外の値を返します。typeofは常に文字列を返します。
したがって
if (typeof maybeObject != "undefined") {
alert("GOT THERE");
}
ここにはハーフ・トゥルースがたくさんあるので、いくつかはっきりさせたいと思いました。
実際には、変数が存在するかどうかを正確に判断することはできません(2行ごとにtry-catchブロックにラップする必要がない限り)。
その理由は、Javascriptにこの悪名高い値がundefined
あり、その変数が定義されていない、または存在しないことを驚くほど意味しないからです。undefined !== not defined
var a;
alert(typeof a); // undefined (declared without a value)
alert(typeof b); // undefined (not declared)
したがって、存在する変数とレポートできない変数の両方が undefined
タイプを。
ケビンの誤解@については、null == undefined
。それは型の強制によるものであり、Crockfordがこの種のことを===
よく知らないすべての人に常に厳密な等価演算子を使用して偽の可能性のある値をテストするように指示し続ける主な理由です。null !== undefined
あなたが期待するかもしれないものをあなたに与えます。これfoo != null
は、変数がundefined
でもでもないかどうかを確認する効果的な方法であることに注意してくださいnull
。もちろん、読みやすくするために、明示的にすることもできます。
オブジェクトが存在するかどうかを確認するために質問を制限する場合、typeof o == "object"
配列オブジェクトを考慮しない場合を除いて、これは良い考えかもしれませんobject
。言うtypeof null
までもありませんが、object
これは単に間違っています。
あなたが本当に気をつけなければなりません原初のエリアtypeof
、undefined
、null
、unknown
およびその他のmisteriesは、ホストオブジェクトです。彼らは信頼できません。彼らは彼らが望むほとんどすべての汚いことをするのは自由です。ですから、機能に注意してください。可能であれば機能を確認してください。これは、存在しない機能を安全に使用する唯一の方法です。
foo!=null
場合、単純に行うとReferenceErrorが生成foo
されます。したがって、typeof
例外をキャッチする予定がない限り、を使用することをお勧めします。
undefined !== not defined
&&foo != null can be an effective way to check if a variable is neither 'undefined' nor 'null'
。!= null
それが存在するかどうかをチェックするのに良いとは言いませんでした。あなたはそれを文脈から外しています。(私はまた、OPの質問の主題に厳密に関連するのではなく、付記であると述べました)
undefined
ます。彼らは同じではありません。(note) it can be used !== you should use
。読みながら常識を使用してください。変数が宣言され(パラメーターリストなど)、変数に値があるかどうかを確認する場合、!=
nullは完全に安全です。これはOPが要求したものとは異なるユースケースです。そのため、私はそれをメモとして導入しました。段落全体は、@ Kevinの投稿と型強制型変換についてです。よく読んでみればわかると思いますが。
!= null
。これは、関数の引数をチェックするために非常に有用である、考える:var hasValue = function(foo) {return foo != null}
それがグローバルオブジェクトである場合、あなたは使うことができます if (!window.maybeObject)
window.hasOwnProperty('maybeObject')
それはグローバルオブジェクトの場合は、もう少し読みやすい
「typeof」を使用できます。
if(typeof maybeObject != "undefined")
alert("GOT HERE");
スレッドはかなり前に開かれました。その間、三項演算子の使用が最も簡単なオプションだと思います。
maybeObject ? console.log(maybeObject.id) : ""
var maybeObject = typeof maybeObject !== "undefined" ? Chart:false;
どうかを確認してくださいfalse
。
私は以前if(maybeObject)
、JavaScriptでnullチェックとしてa を実行していました。
if(maybeObject){
alert("GOT HERE");
}
したがって、maybeObject
-がオブジェクトの場合のみ、アラートが表示されます。私のサイトに例があります。
https://sites.google.com/site/javaerrorsandsolutions/home/javascript-dynamic-checkboxes
maybeObject
で0, 0.0, or ""
falseに、それをチェック
上記のtypeOfの例をテストしたところ、どれも機能しなかったため、代わりにこれを使用しました。
btnAdd = document.getElementById("elementNotLoadedYet");
if (btnAdd) {
btnAdd.textContent = "Some text here";
} else {
alert("not detected!");
}
オブジェクト/変数の存在を確認することとは別に、「最悪の場合」の出力を提供するか、少なくともそれをアラートにトラップして、見過ごされないようにすることができます。
エラーをチェックし、代替を提供し、エラーをキャッチする関数の例。
function fillForm(obj) {
try {
var output;
output = (typeof obj !== 'undefined') ? obj : '';
return (output);
}
catch (err) {
// If an error was thrown, sent it as an alert
// to help with debugging any problems
alert(err.toString());
// If the obj doesn't exist or it's empty
// I want to fill the form with ""
return ('');
} // catch End
} // fillForm End
これを作成したのは、渡したオブジェクトがx、xm、xm [z]であり、xmが存在しない場合はtypeof xm [z]がエラーで失敗するためです。
お役に立てば幸いです。(ところで、私はJSの初心者です)
その存在のみを気にする場合(宣言されているか?)、承認された答えで十分です。
if (typeof maybeObject != "undefined") {
alert("GOT THERE");
}
実際の値があることを気にする場合は、以下を追加する必要があります。
if (typeof maybeObject != "undefined" && maybeObject != null ) {
alert("GOT THERE");
}
なので typeof( null ) == "object"
例えば bar = { x: 1, y: 2, z: null}
typeof( bar.z ) == "object"
typeof( bar.not_present ) == "undefined"
あなたはそれがだでもないことを確認し、このようnull
またはundefined
、それ以来typeof
値が存在しない場合は、エラーはありませんプラス&&
短絡、あなたは実行時エラーを取得することはありません。
個人的には、ヘルパーfnをどこかに追加することをお勧めします(信頼しないでくださいtypeof()
)。
function exists(data){
data !== null && data !== undefined
}
if( exists( maybeObject ) ){
alert("Got here!");
}
div alignmntタブ付きパネルを使用して、Textbox値を1フレームからインラインフレームに設定します。したがって、最初に、値を設定する前に、選択したタブ付きパネルフレームが使用可能かどうか、または次のコードを使用していないかを確認する必要があります。
JavaScriptコード:
/////////////////////////////////////////
<script>
function set_TextID()
{
try
{
if(!parent.frames["entry"])
{
alert("Frame object not found");
}
else
{
var setText=document.getElementById("formx").value;
parent.frames["entry"].document.getElementById("form_id").value=setText;
}
if(!parent.frames["education"])
{
alert("Frame object not found");
}
else
{
var setText=document.getElementById("formx").value;
parent.frames["education"].document.getElementById("form_id").value=setText;
}
if(!parent.frames["contact"])
{
alert("Frame object not found");
}
else
{
var setText=document.getElementById("formx").value;
parent.frames["contact"].document.getElementById("form_id").value=setText;
}
}catch(exception){}
}
</script>
!==
、比較を行うことができます(すべきです)。