Quelle est la différence entre ==
y ===
?
- Comment exactement la vague
==
la comparaison fonctionne-t-elle ? - Comment exactement le strict
===
la comparaison fonctionne-t-elle ?
Quels seraient des exemples utiles ?
Quelle est la différence entre ==
y ===
?
==
la comparaison fonctionne-t-elle ?===
la comparaison fonctionne-t-elle ?Quels seraient des exemples utiles ?
==
y ===
La différence entre l'approche vaguement ==
et l'opérateur strict ===
opérateur identique est exactement expliqué dans le manuel :
Opérateurs de comparaison
Example Name Result $a == $b Equal TRUE if $a is equal to $b after type juggling. $a === $b Identical TRUE if $a is equal to $b, and they are of the same type.
==
comparaison équitableSi vous utilisez le ==
ou tout autre opérateur de comparaison qui utilise la comparaison libre, tel que !=
, <>
o ==
vous devez toujours regarder le contexte pour voir ce qui est converti, où et pourquoi, afin de comprendre ce qui se passe.
A titre de référence et d'exemple, vous pouvez voir le tableau de comparaison dans la page de l'UE. manuel :
Des comparaisons lâches avec
==
TRUE FALSE 1 0 -1 "1" "0" "-1" NULL array() "php" "" TRUE TRUE FALSE TRUE FALSE TRUE TRUE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE TRUE FALSE TRUE FALSE FALSE TRUE FALSE TRUE TRUE FALSE TRUE 1 TRUE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE 0 FALSE TRUE FALSE TRUE FALSE FALSE TRUE FALSE TRUE FALSE TRUE TRUE -1 TRUE FALSE FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE "1" TRUE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE "0" FALSE TRUE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE "-1" TRUE FALSE FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE NULL FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE TRUE TRUE FALSE TRUE array() FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE FALSE FALSE "php" TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE "" FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE
===
comparaison identiqueSi vous utilisez le ===
ou tout autre opérateur de comparaison qui utilise une comparaison stricte, tel que !==
o ===
alors vous pouvez toujours être sûr que les types ne seront pas par magie changer, parce qu'il n'y aura pas de conversion en cours. Ainsi, dans le cas d'une comparaison stricte, le type et la valeur doivent être les mêmes, et pas seulement la valeur.
A titre de référence et d'exemple, vous pouvez voir le tableau de comparaison dans la page de l'UE. manuel :
Des comparaisons strictes avec
===
TRUE FALSE 1 0 -1 "1" "0" "-1" NULL array() "php" "" TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 1 FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 0 FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE -1 FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE "1" FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE "0" FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE "-1" FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE NULL FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE array() FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE "php" FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE "" FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
Peut-être que les chaînes qui ressemblent à des nombres sont converties en nombres avant la comparaison, si c'est vrai, alors 000 == 0000 a du sens.
Ce qui me surprend toujours, c'est que false == array(), et false == 0 mais array() != 0, donc false == array() !=/== 0 ? ça me semble bizarre.
En ce qui concerne le JavaScript :
L'opérateur === fonctionne de la même manière que l'opérateur ==, mais il exige que ses opérandes aient non seulement la même valeur, mais aussi le même type de données.
Par exemple, l'exemple ci-dessous affichera "x et y sont égaux", mais pas "x et y sont identiques".
var x = 4;
var y = '4';
if (x == y) {
alert('x and y are equal');
}
if (x === y) {
alert('x and y are identical');
}
Tout est question de types de données. Prenez un BOOL
(vrai ou faux) par exemple :
true
est également égal à 1
et false
est également égal à 0
le site ==
ne se soucie pas des types de données lors de la comparaison : donc si vous avez une var qui vaut 1 (qui pourrait aussi être true
):
$var=1;
et ensuite comparer avec le ==
:
if ( $var == true )
{
echo"var is true";
}
Mais $var
n'est pas réellement égal à true
n'est-ce pas ? Il a la valeur int de 1
à la place, qui à son tour, est égal à true.
Con ===
les types de données sont vérifiés pour s'assurer que les deux variables/objets/autres utilisent le même type.
Donc si je l'ai fait :
if ( $var === true )
{
echo"var is true";
}
Cette condition ne serait pas vraie, car $var!==true
c'est seulement == true
(si vous voyez ce que je veux dire).
Pourquoi en auriez-vous besoin ?
Simple - Jetons un coup d'œil à l'une des fonctions de PHP : array_search()
:
le site array_search()
recherche simplement une valeur dans un tableau, et renvoie la clé de l'élément dans lequel la valeur a été trouvée. Si la valeur n'a pas été trouvée dans le tableau, elle renvoie la clé de l'élément dans lequel la valeur a été trouvée. faux . Mais, et si vous faisiez un array_search()
sur une valeur qui a été stockée dans le premier élément du tableau (qui aurait la clé de tableau de 0
)....the array_search()
La fonction renverrait 0... ce qui est égal à faux...
Donc si vous l'avez fait :
$arr=array("name");
if (array_search("name",$arr)==false)
{
//this would return 0 (the key of the element the val was found in) but because we're using ==, we'll think the function actually returned false...when it didn't.
}
Donc, vous voyez comment cela pourrait être un problème maintenant ?
La plupart des gens n'utilisent pas == false
lorsqu'on vérifie si une fonction renvoie faux. Au lieu de cela, ils utilisent la fonction !
. Mais en fait, c'est exactement la même chose que d'utiliser ==false
donc si vous l'avez fait :
$arr=array("name");
if (!array_search("name",$arr))//this is the same as doing (array_search("name",$arr)==false)
Donc, pour ce genre de choses, vous utiliseriez la fonction ===
à la place, afin que le type de données soit vérifié.
Vous utiliserez === pour tester si une fonction ou une variable est fausse plutôt que de simplement l'assimiler à false (zéro ou une chaîne vide).
$needle = 'a';
$haystack = 'abc';
$pos = strpos($haystack, $needle);
if ($pos === false) {
echo $needle . ' was not found in ' . $haystack;
} else {
echo $needle . ' was found in ' . $haystack . ' at location ' . $pos;
}
Dans ce cas, strpos renverrait 0, ce qui équivaudrait à false dans le test.
if ($pos == false)
o
if (!$pos)
ce qui n'est pas ce que vous voulez ici.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.