Antworten:
Sie können den typeof
Operator sicher für undefinierte Variablen verwenden.
Wenn ihm ein Wert zugewiesen wurde, einschließlich null, gibt typeof etwas anderes als undefiniert zurück. typeof gibt immer einen String zurück.
Deshalb
if (typeof maybeObject != "undefined") {
alert("GOT THERE");
}
Da es hier viele Halbwahrheiten gibt, dachte ich, ich mache einige Dinge klarer.
Tatsächlich können Sie nicht genau sagen, ob eine Variable vorhanden ist (es sei denn, Sie möchten jede zweite Zeile in einen Try-Catch-Block einschließen).
Der Grund dafür ist, dass Javascript diesen berüchtigten Wert hat, undefined
was auffallend nicht bedeutet, dass die Variable nicht definiert ist oder nicht existiertundefined !== not defined
var a;
alert(typeof a); // undefined (declared without a value)
alert(typeof b); // undefined (not declared)
Also sowohl eine Variable, die existiert, als auch eine andere, die Ihnen den undefined
Typ nicht melden kann .
Was @ Kevins Missverständnis betrifft , null == undefined
. Dies ist auf ===
Typzwang zurückzuführen , und es ist der Hauptgrund, warum Crockford jedem, der sich über solche Dinge nicht sicher ist, immer wieder sagt, dass er immer einen strengen Gleichheitsoperator verwenden soll , um auf möglicherweise falsche Werte zu testen. null !== undefined
gibt Ihnen, was Sie erwarten könnten. Bitte beachten Sie auch, dass foo != null
dies eine effektive Möglichkeit sein kann, um zu überprüfen, ob eine Variable weder undefined
noch ist null
. Natürlich können Sie explizit sein, da dies die Lesbarkeit verbessern kann.
Wenn Sie die Frage einschränken, um zu überprüfen, ob ein Objekt vorhanden ist, ist dies typeof o == "object"
möglicherweise eine gute Idee, es sei denn, Sie berücksichtigen keine Arrays-Objekte, da dies auch als Typ gemeldet wird, der object
Sie möglicherweise etwas verwirrt. Ganz zu schweigen davon, dass Sie typeof null
auch das bekommen, object
was einfach falsch ist.
Der Ur - Bereich , wo man wirklich vorsichtig sein sollte , etwa typeof
, undefined
, null
, unknown
und andere misteries sind Host - Objekte. Man kann ihnen nicht vertrauen. Sie können fast alles tun, was sie wollen. Seien Sie also vorsichtig mit ihnen und prüfen Sie die Funktionalität, wenn Sie können, da dies die einzige sichere Möglichkeit ist, eine Funktion zu verwenden, die möglicherweise gar nicht existiert.
foo!=null
Wenn Sie dies foo
nicht tun, wird ein ReferenceError erstellt, wenn dieser nicht definiert ist. Daher ist es besser zu verwenden typeof
, es sei denn, Sie planen, die Ausnahme abzufangen.
undefined !== not defined
&&foo != null can be an effective way to check if a variable is neither 'undefined' nor 'null'
. Ich habe nicht gesagt, dass != null
es gut ist, um zu überprüfen, ob es existiert. Sie nehmen es aus dem Zusammenhang. (Ich erwähnte auch, dass es eine Nebenbemerkung ist, die nicht eng mit dem Thema der OP-Frage zusammenhängt)
undefined
. Sie sind nicht gleich. (note) it can be used !== you should use
. Verwenden Sie beim Lesen den gesunden Menschenverstand. Wenn die Variable deklariert ist (Parameterliste oder anderswo) und Sie überprüfen möchten, ob sie einen Wert hat, ist !=
null völlig sicher. Es ist ein anderer Anwendungsfall als das, was das OP verlangt hat, deshalb habe ich ihn als Notiz eingeführt. Der ganze Absatz handelt übrigens von @ Kevins Post und Typ Zwang. Wie Sie feststellen können, wenn Sie sorgfältig lesen.
!= null
wenn Sie wissen, dass die Variable deklariert wurde. Dies ist sehr nützlich, um Funktionsargumente zu überprüfen. var hasValue = function(foo) {return foo != null}
Zwei Wege.
Sie können mit typeof auf ein lokales Objekt testen:
if (typeof object !== "undefined") {}
Sie können ein globales Objekt (eines, das im globalen Bereich definiert ist) testen, indem Sie das Fensterobjekt untersuchen:
if (window.FormData) {}
Wenn dies ein globales Objekt ist, können Sie es verwenden if (!window.maybeObject)
window.hasOwnProperty('maybeObject')
es etwas lesbarer, wenn es ein globales Objekt ist
Sie könnten "typeof" verwenden.
if(typeof maybeObject != "undefined")
alert("GOT HERE");
Der Thread wurde vor einiger Zeit geöffnet. Ich denke in der Zwischenzeit ist die Verwendung eines ternären Operators die einfachste Option:
maybeObject ? console.log(maybeObject.id) : ""
var maybeObject = typeof maybeObject !== "undefined" ? Chart:false;
und prüfen Sie, ob nicht false
.
Früher habe ich if(maybeObject)
in meinen Javascripts nur eine Nullprüfung durchgeführt.
if(maybeObject){
alert("GOT HERE");
}
Nur wenn maybeObject
- ein Objekt ist, wird die Warnung angezeigt. Ich habe ein Beispiel auf meiner Website.
https://sites.google.com/site/javaerrorsandsolutions/home/javascript-dynamic-checkboxes
maybeObject
ist 0, 0.0, or ""
, es prüft auf false
Ich habe gerade die typeOf-Beispiele von oben getestet und keines hat für mich funktioniert. Stattdessen habe ich Folgendes verwendet:
btnAdd = document.getElementById("elementNotLoadedYet");
if (btnAdd) {
btnAdd.textContent = "Some text here";
} else {
alert("not detected!");
}
Abgesehen von der Überprüfung der Existenz des Objekts / der Variablen möchten Sie möglicherweise eine "Worst-Case" -Ausgabe bereitstellen oder sie zumindest in einer Warnung einfangen, damit sie nicht unbemerkt bleibt.
Beispiel für eine Funktion, die Fehler überprüft, Alternativen bereitstellt und abfängt.
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
Ich habe dies auch erstellt, weil das Objekt, an das ich es übergeben habe, x, xm, xm [z] sein kann und der Typ xm [z] mit einem Fehler fehlschlagen würde, wenn xm nicht vorhanden wäre.
Ich hoffe, es hilft. (Übrigens bin ich Anfänger bei JS)
Wenn Sie sich nur um seine Existenz kümmern (wurde es deklariert?), Reicht die genehmigte Antwort aus:
if (typeof maybeObject != "undefined") {
alert("GOT THERE");
}
Wenn es Ihnen wichtig ist, dass es einen tatsächlichen Wert hat, sollten Sie Folgendes hinzufügen:
if (typeof maybeObject != "undefined" && maybeObject != null ) {
alert("GOT THERE");
}
Wie typeof( null ) == "object"
z.B bar = { x: 1, y: 2, z: null}
typeof( bar.z ) == "object"
typeof( bar.not_present ) == "undefined"
Auf diese Weise überprüfen Sie, ob es weder null
noch ist undefined
, und da typeof
kein Fehler auftritt, wenn kein Wert vorhanden ist, plus &&
Kurzschlüsse, erhalten Sie niemals einen Laufzeitfehler.
Persönlich würde ich vorschlagen, irgendwo einen Helfer fn hinzuzufügen (und lasst uns nicht vertrauen typeof()
):
function exists(data){
data !== null && data !== undefined
}
if( exists( maybeObject ) ){
alert("Got here!");
}
if (n === Object(n)) {
// code
}
Setzen Sie den Textfeldwert mithilfe des Registerkartenfelds div alignmnt auf einen Frame in einen Inline-Frame. Bevor Sie den Wert festlegen, müssen Sie zunächst überprüfen, ob ausgewählte Rahmen mit Registerkarten verfügbar sind oder nicht, indem Sie die folgenden Codes verwenden:
Javascript Code:
/////////////////////////////////////////
<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>
Null und Null sind implizite Zeiger. Wenn Sie nicht rechnen, vergleichen oder '0' auf dem Bildschirm drucken, müssen Sie es nicht tatsächlich eingeben. Es ist implizit. Wie angedeutet. Aus dem gleichen Grund ist auch Typeof nicht erforderlich. Beobachten.
if (obj) console.log ("existiert");
Ich habe keine Anfrage für ein Nicht gesehen oder sonst ist es nicht enthalten als. So sehr ich zusätzliche Inhalte liebe, die nicht in die Frage passen. Lass es uns einfach halten.
if (!maybeObject)
- aber tatsächlich fragt der Titel nach dem Gegenteil.
Oder Sie können stattdessen alle meine exklusive Methode existest () verwenden und in der Lage sein, Dinge zu tun, die als unmöglich angesehen werden. dh:
Dinge wie: exists("blabla")
oder sogar: exists("foreignObject.guessedProperty.guessNext.propertyNeeded")
sind auch möglich ...
!==
für den Vergleich tun .