La variable booleana regresa como una cadena de la función javascript
(2)
¿Por qué es que cuando regreso, lo que creo que es una variable booleana de una función de JavaScript, se detecta en la función de llamada como una cadena, pero si devuelvo un literal booleano, la función de llamada lo detecta como un valor booleano? ?
Así por ejemplo:
$( document ).ready(function(){
$(''#result'').text(typeof validate());
$(''#result2'').text(typeof validate2());
});
function validate(){
status = true;
status = false;
return status;
}
function validate2(){
return true;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>Hello</p>
<div id="result"></div>
<div id="result2"></div>
No declara la variable de
status
estado.
Por lo tanto, el global ( developer.mozilla.org/en-US/docs/Web/API/Window/status ) se sobrescribe.
Sin embargo, la especificación HTML 5 define esa propiedad como DOMString:
interface Window : EventTarget {
attribute DOMString status;
};
Por lo tanto, tiene un setter (ya sea expuesto o interno) que almacena el valor en cadena.
Para solucionarlo, simplemente declare su variable local utilizando la
instrucción
var
.
$( document ).ready(function(){
$(''#result'').text(typeof validate());
$(''#result2'').text(typeof validate2());
});
function validate(){
var status = true;
status = false;
return status;
}
function validate2(){
return true;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>Hello</p>
<div id="result"></div>
<div id="result2"></div>
EDITAR: estaba construyendo la respuesta y algo sale mal, de todos modos, @Oriol explica bien el motivo: la variable global window.status es la que tiene el tipo de valor de cadena.