Je reçois un objet JSON avec ces propriétés

id: "23132772"
isAvailable: "1",
isSelected: "0",
maxPoints: "0",
minPoints: "0",
name: "Parlay",
placeBetIsAvailable: "0"

Ce JSON provient d'un objet nommé betType

Disons donc que je veux travailler avec placeBetIsAvailable quand c'est false.

Comme vous le voyez, j'ai là placeBetIsAvailable: "0"

Donc, dans mon code, suis-je capable de faire:

if(!betType.placeBetIsAvailable)?

Ou devrais-je préciser

if(betType.placeBetIsAvailable === '0')?

1
Non 17 juil. 2015 à 23:27

4 réponses

Meilleure réponse

La chaîne "0" est véridique en JavaScript, tandis que le nombre 0 ne l'est pas. Si votre JSON est codé avec des zéros entre guillemets, ce sont des chaînes non vides.

5
Pointy 17 juil. 2015 à 20:30

Essayez de le convertir en nombre et utilisez! pour le convertir en booléen

if(!!Number(betType.placeBetIsAvailable))
1
abs 17 juil. 2015 à 20:58

La construction if(!betType.placeBetIsAvailable) est inappropriée si vous utilisez les chaînes "0" et "1" pour coder true et false. Tapez ceci dans votre barre d'adresse pour voir pourquoi.

javascript:alert(["0", !"0", "1", !"1"])

Fondamentalement,! "0" et! "1" sont tous les deux évalués à false.

Si vous vraiment ne pouvez rien faire pour le JSON retourné par le serveur, vous devez utiliser le formulaire if(betType.placeBetIsAvailable === '0').

1
damix911 17 juil. 2015 à 20:46

Si c'était un nombre et non une chaîne, vous pourriez le faire, mais comme c'est une chaîne avec du caractère dans la chaîne (pas une chaîne vide ''), ce n'est plus falsey. Pour résoudre ce problème, vous pouvez le faire

if(!parseInt(betType.placeBetIsAvailable)) 

Ou

if(!+betType.placeBetIsAvailable)

Ce qui est probablement plus de travail que de faire

if(betType.placeBetIsAvailable === '0')
1
ijsnow 17 juil. 2015 à 20:34