en javascript,
var a = '';
var b = (a) ? true : false;
var b
sera défini sur false
.
est-ce un comportement défini sur lequel on peut se fier?
javascript
string
boolean
cc jeune
la source
la source
false
ici: jsfiddle.net/8CKbd''
est évaluée à false dans un contexte booléen, donc sia = '';
alorsa ? false : true
=>'' ? false : true
=>false ? false : true
=>true
(car est l'évaluation d'une fausse valeur). Je pense que cela devrait êtrevar b = (a) ? true : false;
correct avec la prochaine déclaration.Réponses:
Oui. Javascript est un dialecte d'ECMAScript, et la spécification du langage ECMAScript définit clairement ce comportement:
Citation tirée de http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
la source
new String("")
c'est la vérité! C'est parce qu'il s'agit d'un objet, alors que la forme courte""
représente la version de valeur primitive. La même chose vaut pournew Number(0)
et mêmenew Boolean(false)
. C'est une bonne raison de ne pas utiliser les versions d'objet dans votre code, et cela signifie queif (str.length)
cela gère ce cas de bord alors queif (str)
ce ne serait pas le cas.Oui. Tous
false
,0
, des chaînes vides''
et""
,NaN
,undefined
etnull
sont toujours évalués commefalse
; tout le reste esttrue
.Et dans votre exemple, b est
false
après évaluation. (Je pense que tu as écrit par erreurtrue
)la source
null
n'est pasfalse
, nitrue
,null
estnull
. jsfiddle.net/sq1Lkpg0NaN
etundefined
. Ils ne le sont pas,false
mais ils sont faux. C'est ce qui a été demandé.Comme ci - dessus répondu, oui , c'est le comportement défini d'une chaîne vide dans une condition (une
if
expression,||
,&&
,? :
, ...). (La norme dit que l' opération ToBoolean interne doit être appliquée.)L'évaluation est différente lorsque la chaîne vide est utilisée dans une comparaison (voir Vérité, Égalité et JavaScript ), même si les résultats sont pour la plupart les mêmes :
Explication: Essentiellement, lorsque les opérandes de
==
ont des types différents, JavaScript s'efforce de les convertir en nombres, en fonction de leur valeur , (à l' aide d' opérations que le standard appelle ToNumber et ToPrimitive ), puis il s'applique en interne===
. Mais lorsque vous utilisez===
directement, les types ne sont pas convertis, donc comparer une chaîne à un booléen l'est toujoursfalse
.En gros, les conditions JavaScript ( ToBoolean ) testent une valeur définie, non nulle, non nulle, non vide, non fausse (une chaîne vide est ... vide, les nombres -0 ou +0 sont ... zéro, NaN n'est pas un nombre défini, mais un objet vide n'est apparemment pas vraiment vide), ou comme j'aime à le penser, les conditions testent une chose (vraie) , tandis que
==
compare les valeurs apparentes et soigneusement converties ( ToPrimitive , ToNumber ) de ses opérandes, et===
recherche la similitude exacte .Il y a d' autres exemples dans la vérité, l' égalité et JavaScript où cette distinction est vraiment important, par exemple ,
'0'
esttrue
dans une condition (longueur non nulle, ou, il est une chose ), maisfalse
dans une==
comparaison (la valeur est égale à zéro).'1'
encore une fois, c'esttrue
dans les deux cas (c'est une chose et a une valeur non nulle).la source
var b
sera défini surtrue
. En effet, une chaîne vide compte comme une valeur «falsey» dans JavaScript, tout comme certaines autres valeurs.Veuillez consulter http://www.sitepoint.com/javascript-truthy-falsy/ pour des valeurs fausses
la source
var b
sera en fait défini surtrue
parce que c'est l'opposé devar a
si vous regardez le code.la source