En PHP, vous pouvez le faire if(isset($array['foo'])) { ... }
. En JavaScript, vous utilisez souvent if(array.foo) { ... }
pour faire la même chose, mais ce n'est pas exactement la même déclaration. La condition sera également évaluée à false si array.foo
elle existe mais est false
ou 0
(et probablement d'autres valeurs également).
Quel est l'équivalent parfait de PHP isset
en JavaScript?
Dans un sens plus large, un guide général et complet sur la gestion par JavaScript des variables qui n'existent pas, des variables sans valeur, etc. serait pratique.
javascript
isset
Bart van Heukelom
la source
la source
_.isUndefined(arr.foo)
Réponses:
J'utilise généralement l'
typeof
opérateur:Il retournera
"undefined"
soit si la propriété n'existe pas ou si sa valeur estundefined
.(Voir aussi: Différence entre
undefined
et non défini. )Il existe d'autres façons de déterminer si une propriété existe sur un objet, comme la
hasOwnProperty
méthode:Et l'
in
opérateur:La différence entre les deux derniers est que la
hasOwnProperty
méthode vérifie si la propriété existe physiquement sur l'objet (la propriété n'est pas héritée).L'
in
opérateur vérifiera toutes les propriétés accessibles dans la chaîne du prototype, par exemple:Comme vous pouvez le voir,
hasOwnProperty
retournefalse
et l'in
opérateur retournetrue
lors de la vérification de latoString
méthode, cette méthode est définie dans la chaîne du prototype, carobj
hérite de la formeObject.prototype
.la source
typeof
plutôt queif( obj.foo !== undefined )
?isset($abc->def->ghi->jkl)
sans déclencher une exception et arrêter le script, contrairement à l'typeof
opérateur JavaScript . Vous devez utiliser quelque chose commetry{ abc.def.ghi.jkl; isset=true } catch(e){ isset=false }
Un thread ancien, mais il existe de nouvelles façons d'exécuter un équivalent
isset()
.ESNext (étape 4 décembre 2019)
Deux nouvelles syntaxes nous permettent de simplifier considérablement l'utilisation des
isset()
fonctionnalités:?.
)??
)Veuillez lire la documentation et faire attention à la compatibilité du navigateur.
Réponse précédente
Voir ci-dessous pour l'explication. Remarque J'utilise la syntaxe StandardJS
Exemple d'utilisation
Fonction de réponse
Explication
PHP
Notez qu'en PHP, vous pouvez référencer n'importe quelle variable à n'importe quelle profondeur - même essayer d'accéder à un non-tableau en tant que tableau retournera un simple
true
oufalse
:JS
En JavaScript, nous n'avons pas cette liberté, nous aurons toujours une erreur si nous faisons de même car JS essaie immédiatement d'accéder à la valeur de
deeper
avant de pouvoir l'envelopper dans notreisset()
fonction donc ...Plus d'alternatives défaillantes:
Et quelques alternatives de travail qui peuvent devenir redondantes rapidement:
Conclusion
Toutes les autres réponses - bien que la plupart soient viables ...
isset()
par exemple
isset(some, 'nested.deeper.value')
eval()
ce qui fonctionne mais j'évite personnellementJe pense que j'en ai couvert beaucoup. Il y a certains points que je soulève dans ma réponse que je n'aborde pas car ils - bien que pertinents - ne font pas partie de la question. Si besoin est, cependant, je peux mettre à jour ma réponse avec des liens vers certains des aspects les plus techniques en fonction de la demande.
J'ai passé trop de temps sur ce sujet, donc j'espère que cela aide les gens.
Merci pour la lecture!
la source
phpjs.org est principalement à la retraite en faveur de locutus Voici le nouveau lien http://locutus.io/php/var/isset
la source
isset(abc.def.ghi)
au cas où ifabc.def
n'est pas défini. Cependant en combinant cette solution avec celle qui accepte un nom de variable sous forme de chaîne, elle sera identique à la version PHP.la source
la source
Cette solution simple fonctionne, mais pas pour une vérification approfondie des objets.
la source
J'utilise toujours cette fonction générique pour éviter les erreurs sur les variables primitives ainsi que sur les tableaux et les objets.
la source
Si vous utilisez des traits de soulignement, j'utilise toujours
la source
Ceci est une solution assez à l'épreuve des balles pour tester si une variable existe:
Malheureusement, vous ne pouvez pas simplement l'encapsuler dans une fonction.
Vous pourriez penser à faire quelque chose comme ça:
Cependant, cela produira une erreur de référence si la variable
variable
n'a pas été définie, car vous ne pouvez pas transmettre une variable non existante à une fonction:D'un autre côté, cela vous permet de tester si les paramètres de fonction ne sont pas définis:
Même si aucune valeur
y
n'est transmise à la fonctiontest
, notreisset
fonction fonctionne parfaitement dans ce contexte, car elley
est connue dans la fonctiontest
comme uneundefined
valeur.la source
!==
est déjà un booléen.Il est trop long pour écrire lorsqu'il est utilisé. Mais nous ne pouvons pas empaqueter le
typeof
mot - clé dans une fonction, car une erreur sera levée avant l'appel de la fonction, comme ceci:J'ai donc trouvé un moyen:
Il peut fonctionner à la fois avec des variables individuelles (variables qui n'existent pas du tout) ou des propriétés d'objet (propriétés inexistantes). Et seulement 7 caractères de plus que PHP
isset
.la source
Cette solution a fonctionné pour moi.
la source
isset(var)
avecvar
unset:ReferenceError: var is not defined
la source
isset(someVar)
, oùsomeVar
n'a jamais été déclaré. Cependant, étant donné que vous le faiteseval
, vous avez probablement l'intention de transmettre une chaîne . Afficher l'utilisation. Votre usage est-il prévuisset('someVar')
? Si oui, cela ressemble à cette réponse précédente - qu'en est-il de votre réponse est nouvelle?plus tests:
https://gist.github.com/daylik/24acc318b6abdcdd63b46607513ae073
la source
Pour vérifier si le bloc html est existant ou non, j'utilise ce code:
la source
Fournissez le chemin de l'objet sous forme de chaîne, puis vous pouvez diviser cette chaîne en chemin et résoudre
hasOwnProperty
à chaque étape tout en écrasant l'objet lui-même à chaque itération.Si vous codez dans un environnement ES6, jetez un œil à ces Ques de stackoverflow .
la source
J'utilise une fonction qui peut vérifier les variables et les objets. très pratique pour travailler avec jQuery
la source
C'était vraiment un problème pour moi lorsque j'accédais à une propriété plus profonde d'un objet, j'ai donc créé une fonction qui retournera la valeur de la propriété si elle existe sinon elle retournera false. Vous pouvez l'utiliser pour gagner du temps,
la source
Si vous souhaitez vérifier si un élément existe, utilisez simplement le code suivant:
Voici un exemple:
la source
la source
Manuel PHP dit:
Et interface quelque chose comme ceci:
bool isset ( mixed $var [, mixed $... ] )
Le paramètre
$var
est la variable à vérifier. il peut cependant avoir n'importe quel nombre de paramètres.isset () retourne
TRUE
si var existe et a une valeur autre queNULL
.FALSE
autrement.Un exemple:
Dans cet esprit, apparemment, il n'est pas possible d'écrire l'équivalent exact de la
isset()
fonction php . Par exemple, lorsque nous appelons comme ceci:Déclencheur Javascript
Uncaught ReferenceError: some_var is not defined at (file_name):line_number
. La chose importante et remarquable à propos de ce comportement est que lorsque vous essayez de passer des variables inexistantes à des fonctions normales, une erreur est déclenchée.Mais en PHP
isset()
ne sont pas en fait des fonctions régulières mais des constructions de langage. Cela signifie qu'ils font partie du langage PHP lui-même, ne respectent pas les règles normales des fonctions et peuvent donc éviter de déclencher une erreur pour les variables inexistantes. Ceci est important lorsque vous essayez de déterminer si une variable existe ou non. Mais en javscript, il déclenche une erreur en premier lieu par exemple appel de fonction avec des variables inexistantes.Mon point est que nous ne pouvons pas l'écrire en tant que fonction javscript équivalente, mais nous pouvons faire quelque chose comme ça
Si vous voulez exactement le même effet, PHP vérifie également que la variable n'est pas
NULL
Par exemple
Donc, nous pouvons l'incorporer dans javascript puis cela ressemble à ceci:
la source
javascript isset
la source
Soyez prudent dans ES6 , toutes les solutions précédentes ne fonctionnent pas si vous voulez vérifier une déclaration d'une variable let et la déclarer, si ce n'est pas le cas
exemple
vous verrez une erreur
La solution était de le changer par un var
une autre solution si vous pouvez changer un let par un var, vous devez supprimer votre var
la source
la source