Puis-je définir des variables à undefined ou passer undefined comme argument?
Je suis un peu confus au sujet des valeurs undefined
et null
de JavaScript.
Que fait réellement if (!testvar)
? Est-ce qu'il teste undefined
et null
ou juste undefined
?
une fois qu'une variable est définie, puis-je la ramener à undefined
(donc supprimer la variable)?
puis-je passer undefined
comme paramètre? Par exemple:
function test(var1, var2, var3) {
}
test("value1", undefined, "value2");
10 réponses
Je suis un peu confus au sujet de Javascript non défini & null.
ne pas confondre avec null
. Elle a généralement un sens et se comporte de la même manière que les concepts des autres langues de script pour les objets hors bande "nul", " nul " ou "aucun".
undefined
, d'un autre côté, est une bizarrerie JavaScript. C'est un objet unique qui représente des valeurs hors-bande, essentiellement une seconde semblable-mais différent null
.
-
lorsque vous appelez une fonction avec moins d'arguments que la liste d'arguments dans les listes de déclarations
function
, les arguments non-traités sont définis àundefined
. Vous pouvez tester pour cela avec par exemple.:function dosomething(arg1, arg2) { if (arg2===undefined) arg2= DEFAULT_VALUE_FOR_ARG2; ... }
avec cette méthode, vous ne pouvez pas dire la différence entre
dosomething(1)
etdosomething(1, undefined)
;arg2
sera la même valeur dans les deux. Si vous avez besoin de le dire la différence que vous pouvez regarderarguments.length
, mais faire des arguments optionnels comme cela n'est généralement pas très lisible. -
Lorsqu'une fonction n'a pas de
return value;
, elle retourneundefined
. Il n'est généralement pas nécessaire d'utiliser un tel résultat de retour. -
lorsque vous déclarez une variable en ayant une instruction
var a
dans un bloc, mais que vous n'avez pas encore attribué de valeur à cette variable, elle estundefined
. Encore une fois, vous ne devrait pas vraiment jamais besoin de s'appuyer sur cela. -
spooky
typeof
opérateur renvoie la'undefined'
lors de son opérande est une simple variable qui n'existe pas, au lieu de jeter une erreur que l'on devrait normalement se produire si vous avez essayé de s'y référer. (Vous pouvez également lui donner une variable simple enveloppée entre parenthèses, mais pas une expression complète impliquant une variable non existante.) Pas beaucoup d'utilisation pour que, soit. -
C'est le sujet controversé. Lorsque vous accédez à une propriété d'un objet qui n'existe pas, vous n'obtenez pas immédiatement une erreur comme dans toutes les autres langues. À la place, vous obtenez un objet
undefined
. (Et puis quand vous essayez d'utiliser cet objetundefined
plus tard dans le script, il va se tromper d'une manière étrange qui est beaucoup plus difficile à retrouver que si JavaScript avait juste jeté une erreur tout de suite.)c'est souvent utilisé pour vérifier l'existence de propriétés:
if (o.prop!==undefined) // or often as truthiness test, if (o.prop) ...do something...
cependant, parce que vous pouvez attribuer
undefined
comme toute autre valeur:o.prop= undefined;
qui ne détecte pas réellement si la propriété est là de manière fiable. Il est préférable d'utiliser l'opérateur
in
, qui n'était pas dans la version originale de JavaScript de Netscape, mais qui est disponible partout maintenant:if ('prop' in o) ...
en résumé, undefined
est un désordre spécifique au JavaScript, qui trouble tout le monde. En dehors des arguments de fonction optionnels, où JS n'a pas d'autre mécanisme plus élégant, undefined
devrait être évitée. Il n'aurait jamais dû faire partie du langage; null
aurait très bien fonctionné pour (2) et (3), et (4) est une erreur qui n'existe que parce Qu'au début JavaScript n'avait pas d'exceptions.
que fait réellement
if (!testvar)
? Est-il tester pour Non défini et nul ou tout simplement non défini?
un tel contrôle de "véracité" contre false
, undefined
, null
, 0
, NaN
et des cordes vides. Mais dans ce cas, oui, il est vraiment undefined
il s'intéresse. OMI, il devrait être plus explicite à ce sujet et de dire if (testvar!==undefined)
.
une fois qu'une variable est définie, puis-je la ramener à un état non défini (donc supprimer la variable).
vous pouvez certainement lui assigner undefined
, mais cela ne supprimera pas la variable. Seul l'opérateur delete object.property
enlève vraiment les choses.
delete
est réellement destiné aux propriétés plutôt qu'aux variables en tant que telles. Les navigateurs vous permettront de vous en tirer avec delete variable
, mais ce n'est pas une bonne idée et ne fonctionnera pas en mode strict de la cinquième édition D'ECMAScript. Si vous voulez libérer une référence à quelque chose afin qu'il puisse être ramassée par les ordures, il serait plus habituel de dire variable= null
.
puis-je passer indéfini comme paramètre?
Oui.
on ne peut pas (ne doit pas?) définir quoi que ce soit comme non défini, car la variable ne serait plus non défini – vous venez défini à quelque chose.
on ne peut pas (ne doit pas?) passer undefined
à une fonction. Si vous voulez passer une valeur vide, utilisez null
à la place.
l'instruction if(!testvar)
vérifie les valeurs vraies/fausses booléennes, celle-ci teste si testvar
évalue à false
. Par définition, null
et undefined
ne devraient pas être évalués ni comme true
ou false
, mais JavaScript évalue null
comme false
, et donne une erreur si vous essayez d'évaluer une variable non définie.
pour tester correctement undefined
ou null
, utilisez les:
if(typeof(testvar) === "undefined") { ... }
if(testvar === null) { ... }
la différence fondamentale est que undefined
et null
représentent des concepts différents.
si seulement null
était disponible, vous ne seriez pas en mesure de déterminer si null
a été défini intentionnellement comme la valeur ou si la valeur n'a pas encore été définie à moins que vous avez utilisé la capture d'erreur lourde: par exemple
var a;
a == null; // This is true
a == undefined; // This is true;
a === undefined; // This is true;
cependant, si vous mettez intentionnellement la valeur à null
, l'égalité stricte avec undefined
échoue, vous permettant ainsi de différencier entre null
et undefined
valeurs:
var b = null;
b == null; // This is true
b == undefined; // This is true;
b === undefined; // This is false;
vérifier la référence ici au lieu de compter sur les gens disant avec dédain junk comme "en résumé, indéfini est un désordre JavaScript spécifique, qui confond tout le monde". Juste parce que vous êtes confus, cela ne signifie pas que c'est un gâchis.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined
ce comportement n'est pas non plus spécifique au JavaScript et il complète le concept généralisé qu'un résultat booléen peut être true
, false
, inconnu ( null
), aucune valeur ( undefined
), ou quelque chose a mal tourné ( error
).
la meilleure façon de vérifier les valeurs nulles est
if ( testVar !== null )
{
// do action here
}
et pour non défini
if ( testVar !== undefined )
{
// do action here
}
vous pouvez assigner un avariable Non défini.
testVar = undefined;
//typeof(testVar) will be equal to undefined.
pour répondre à votre première question, l'opérateur not ( !
) forcera tout ce qui est donné dans une valeur booléenne. Donc null
, 0
, false
, NaN
et ""
(chaîne vide) apparaîtra false.
OUI, vous le pouvez, parce que l'indéfini est défini comme indéfini.
console.log(
/*global.*/undefined === window['undefined'] &&
/*global.*/undefined === (function(){})() &&
window['undefined'] === (function(){})()
) //true
votre cas:
test("value1", undefined, "value2")
vous pouvez aussi créer votre propre variable non définie:
Object.defineProperty(this, 'u', {value : undefined});
console.log(u); //undefined
JavaScript, comment définir une variable à non définie sur la ligne de commande:
définit une variable non définie dans le terminal de ligne de commande javascript js
fourni avec Java sur Ubuntu 12.10.
el@defiant ~ $ js
js> typeof boo
"undefined"
js> boo
typein:2: ReferenceError: boo is not defined
js> boo=5
5
js> typeof boo
"number"
js> delete(boo)
true
js> typeof boo
"undefined"
js> boo
typein:7: ReferenceError: boo is not defined
si vous définissez une variable à non définie dans un javascript:
mettez ça dans myjs.html:
<html>
<body>
<script type="text/JavaScript">
document.write("aliens: " + aliens);
document.write("typeof aliens: " + (typeof aliens));
var aliens = "scramble the nimitz";
document.write("found some aliens: " + (typeof aliens));
document.write("not sayings its aliens but... " + aliens);
aliens = undefined;
document.write("aliens deleted");
document.write("typeof aliens: " + (typeof aliens));
document.write("you sure they are gone? " + aliens);
</script>
</body>
</html>
Il imprime ceci:
aliens: undefined
typeof aliens: undefined
found some aliens: string
not sayings its aliens but... scramble the nimitz
aliens deleted
typeof aliens: undefined
you sure they are gone? undefined
ATTENTION! Lors de la configuration de votre variable indéfinie vous configurez une variable à une autre variable. Si une personne sournoise exécute undefined = 'rm -rf /';
, alors chaque fois que vous définissez votre variable à undefined, vous recevrez cette valeur.
vous vous demandez peut-être comment je peux afficher la valeur non définie des aliens au début et la faire tourner. C'est à cause du hissage javascript: http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html
le pour if (something)
et if (!something)
est couramment utilisé pour vérifier si quelque chose est défini ou non. Par exemple:
if (document.getElementById)
l'identifiant est converti en valeur booléenne, donc undefined
est interprété comme false
. Il y a bien sûr d'autres valeurs (comme 0 et ") qui sont aussi interprétées comme false
, mais soit l'identifiant ne devrait pas raisonnablement avoir une telle valeur, soit vous êtes heureux de traiter une telle valeur comme non définie.
Javascript dispose d'un opérateur delete
qui peut être utilisé pour supprimer un membre d'un objet. Selon la portée d'une variable (c'est-à-dire si elle est globale ou non), vous pouvez la supprimer pour la rendre non définie.
il n'y a pas de mot-clé undefined
que vous pouvez utiliser comme un littéral Non défini. Vous pouvez omettre des paramètres dans un appel de fonction pour les rendre non définis, mais cela ne peut être utilisé qu'en envoyant moins de paramètres à la fonction, vous ne pouvez pas omettre un paramètre dans le milieu.
juste pour le plaisir, voici une façon assez sûre d'attribuer "non assigné" à une variable. Pour cela avoir une collision exigerait quelqu'un d'avoir ajouté au prototype pour objet avec exactement le même nom que la chaîne générée au hasard. Je suis sûr que le générateur de chaîne aléatoire pourrait être amélioré, mais je viens de prendre une de cette question: générer chaîne aléatoire / caractères en JavaScript
cela fonctionne en créant un nouvel objet et en essayant d'accéder une propriété sur elle avec une générés aléatoirement nom, qui nous supposons l'habitude existent et ont donc la valeur undefined.
function GenerateRandomString() {
var text = "";
var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
for (var i = 0; i < 50; i++)
text += possible.charAt(Math.floor(Math.random() * possible.length));
return text;
}
var myVar = {}[GenerateRandomString()];