Respuestas:
Puede usar el typeof
operador de forma segura en variables indefinidas.
Si se le ha asignado algún valor, incluido nulo, typeof devolverá algo distinto de indefinido. typeof siempre devuelve una cadena.
Por lo tanto
if (typeof maybeObject != "undefined") {
alert("GOT THERE");
}
Aquí hay muchas medias verdades, así que pensé en aclarar algunas cosas.
En realidad, no puede saber con precisión si existe una variable (a menos que desee ajustar cada segunda línea en un bloque try-catch).
La razón es que Javascript tiene este notorio valor, lo undefined
que sorprendentemente no significa que la variable no esté definida o que no exista.undefined !== not defined
var a;
alert(typeof a); // undefined (declared without a value)
alert(typeof b); // undefined (not declared)
Entonces, tanto una variable que existe como otra que no puede informarle undefined
tipo.
En cuanto a la idea errónea de Kevin @, null == undefined
. Se debe a la coerción de tipo, y es la razón principal por la que Crockford sigue diciéndole a todos los que no están seguros de este tipo de cosas que siempre usen un operador de igualdad estricto ===
para probar posibles valores falsos. null !== undefined
te da lo que podrías esperar. Tenga en cuenta también que foo != null
puede ser una forma efectiva de verificar si una variable no es undefined
ninull
. Por supuesto, puede ser explícito, porque puede ayudar a la legibilidad.
Si restringe la pregunta para verificar si existe un objeto, typeof o == "object"
puede ser una buena idea, excepto si no considera los objetos de matrices, ya que también se informará que ese tipo object
puede confundirlo un poco. Sin mencionar que typeof null
también te daráobject
que simplemente está mal.
La zona primaria donde realmente se debe tener cuidado con typeof
, undefined
, null
, unknown
y otros misterios son objetos de acogida. No se puede confiar en ellos. Son libres de hacer casi cualquier cosa sucia que quieran. Así que tenga cuidado con ellos, verifique la funcionalidad si puede, porque es la única forma segura de usar una función que puede no existir.
foo!=null
producirá un Error de referencia si foo
no está definido. Por lo tanto, es mejor usarlo typeof
, a menos que esté planeando detectar la excepción.
undefined !== not defined
&&foo != null can be an effective way to check if a variable is neither 'undefined' nor 'null'
. No dije que != null
sea bueno para verificar si existe. Lo estás sacando de contexto. (También mencioné que es una nota al margen, no estrictamente relacionada con el tema de la pregunta del OP)
undefined
. Ellos no son los mismos. (note) it can be used !== you should use
. Use el sentido común mientras lee. Cuando se declara la variable (lista de parámetros u otro lugar) y desea verificar si tiene un valor, !=
nulo es completamente seguro. Es un caso de uso diferente al que solicitó el OP, por eso lo introduje como una nota. Todo el párrafo es sobre la publicación de @ Kevin y la coerción de tipo por cierto. Como puedes notar si lees con cuidado.
!= null
cuando se sabe que la variable ha sido declarada. Esto es muy útil para verificar argumentos de función, considere:var hasValue = function(foo) {return foo != null}
Dos caminos.
Puede probar un objeto local usando typeof:
if (typeof object !== "undefined") {}
Puede probar un objeto global (uno definido en el alcance global) inspeccionando el objeto de la ventana:
if (window.FormData) {}
Si ese es un objeto global, puede usar if (!window.maybeObject)
window.hasOwnProperty('maybeObject')
es un poco más legible, si es un objeto global
Podrías usar "typeof".
if(typeof maybeObject != "undefined")
alert("GOT HERE");
El hilo se abrió hace bastante tiempo. Mientras tanto, creo que el uso de un operador ternario es la opción más simple:
maybeObject ? console.log(maybeObject.id) : ""
var maybeObject = typeof maybeObject !== "undefined" ? Chart:false;
y verifique si no false
.
Solía hacer un if(maybeObject)
chequeo nulo en mis javascripts.
if(maybeObject){
alert("GOT HERE");
}
Entonces, solo si maybeObject
- es un objeto, se mostrará la alerta. Tengo un ejemplo en mi sitio.
https://sites.google.com/site/javaerrorsandsolutions/home/javascript-dynamic-checkboxes
maybeObject
es así 0, 0.0, or ""
, se verifica como falso
Acabo de probar los ejemplos typeOf de arriba y ninguno funcionó para mí, así que en su lugar he usado esto:
btnAdd = document.getElementById("elementNotLoadedYet");
if (btnAdd) {
btnAdd.textContent = "Some text here";
} else {
alert("not detected!");
}
Además de verificar la existencia del objeto / variable, es posible que desee proporcionar una salida del "peor de los casos" o al menos atraparlo en una alerta para que no pase desapercibido.
Ejemplo de función que verifica, proporciona alternativas y detecta errores.
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
También creé esto porque el objeto que le estaba pasando podría ser x, xm, xm [z] y typeof xm [z] fallaría con un error si xm no existiera.
Espero que ayude. (Por cierto, soy novato con JS)
Si solo le importa su existencia (¿se ha declarado?), La respuesta aprobada es suficiente:
if (typeof maybeObject != "undefined") {
alert("GOT THERE");
}
Si le importa que tenga un valor real, debe agregar:
if (typeof maybeObject != "undefined" && maybeObject != null ) {
alert("GOT THERE");
}
Como typeof( null ) == "object"
p.ej bar = { x: 1, y: 2, z: null}
typeof( bar.z ) == "object"
typeof( bar.not_present ) == "undefined"
de esta manera verifica que no sea ninguno null
o undefined
, y dado typeof
que no se produce un error si el valor no existe más&&
los cortocircuitos, nunca obtendrá un error en tiempo de ejecución.
Personalmente, sugeriría agregar un ayudante fn en alguna parte (y no confiemos typeof()
):
function exists(data){
data !== null && data !== undefined
}
if( exists( maybeObject ) ){
alert("Got here!");
}
if (n === Object(n)) {
// code
}
establezca el valor del cuadro de texto en un cuadro en línea usando el panel con pestañas de alineación div. Entonces, antes que nada, antes de establecer el valor, debemos verificar que el marco de paneles con pestañas seleccionado esté disponible o no utilizando los siguientes códigos:
Código 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>
cero y nulo son punteros implícitos. Si no está haciendo aritmética, comparando o imprimiendo '0' en la pantalla, no hay necesidad de escribirlo. Es implícito. Como en implícito. Typeof tampoco se requiere por la misma razón. Reloj.
if (obj) console.log ("existe");
No vi la solicitud de un no o de lo contrario no está incluido como. Por mucho que me encanta el contenido extra que no encaja en la pregunta. Vamos a mantenerlo simple.
if (!maybeObject)
pero, de hecho, el título pide lo contrario.
O bien, todos ustedes pueden comenzar a usar mi exclusivo existe () método lugar y ser capaces de hacer cosas consideradas imposibles. es decir:
Cosas como: exists("blabla")
o incluso: exists("foreignObject.guessedProperty.guessNext.propertyNeeded")
también son posibles ...
!==
para la comparación.