3518 votes

Comment puis-je convertir une chaîne booléen en JavaScript?

Puis-je convertir une chaîne de caractères représentant une valeur booléenne (par exemple, 'true', 'false') dans un type intrinsèque en JavaScript?

J'ai caché un formulaire en HTML qui est mis à jour basé sur une sélection de l'utilisateur dans une liste. Ce formulaire contient des champs qui représentent des valeurs booléennes et sont rempli dynamiquement avec une valeur intrinsèque valeur booléenne. Cependant, une fois que cette valeur est placée dans le champ caché, il devient une chaîne de caractères.

La seule façon que j'ai pu trouver afin de déterminer le champ de la valeur booléenne, une fois qu'il a été converti en une chaîne de caractères, a été dépendre de la valeur littérale de sa représentation sous forme de chaîne.

var myValue = document.myForm.IS_TRUE.value;
var isTrueSet = myValue == 'true';

Est-il un meilleur moyen pour y parvenir?

4967voto

guinaps Points 4055

Vous devriez être prudent sur l'utilisation de ces deux méthodes à vos besoins spécifiques:

var myBool = Boolean("false");  // == true

var myBool = !!"false";  // == true

Une chaîne qui n'est pas la chaîne vide évaluer à l' true en les utilisant. Bien qu'ils soient les méthodes les plus propres que je pense concernant la conversion booléenne, je pense qu'ils ne sont pas ce que vous cherchez.

À propos de la façon dont vous l'avez suggéré, vous pouvez le faire plus strictes en utilisant l'identité de l'opérateur (===), ce qui ne veut pas faire les conversions de type implicites lors de la comparaison des variables de différents types, au lieu de l'opérateur d'égalité (==), ce qui n':

var isTrueSet = (myValue === 'true');

861voto

Luke Points 517

Comment?

JSON.parse("true");

ou avec jQuery

$.parseJSON("true");

171voto

Jared Farrish Points 26391

N'oubliez pas de respecter la casse:

var isTrueSet = (myValue.toLowerCase() === 'true');

Aussi, si c'est un élément de formulaire case à cocher, vous pouvez également détecter si la case est cochée:

var isTrueSet = document.myForm.IS_TRUE.checked;

En supposant que si elle est cochée, il est "set" est égal à true. C'est évaluée comme true/false.

138voto

Shadow2531 Points 6726
String.prototype.bool = function() {
    return (/^true$/i).test(this);
};
alert("true".bool());

Pour ceux (voir les commentaires) qui voudrait étendre la Chaîne de l'objet pour obtenir cela, mais vous êtes préoccupé par enumerability et sont inquiets au sujet de conflit avec un autre code qui s'étend de la Chaîne de l'objet:

Object.defineProperty(String.prototype, "com_example_bool", {
    get : function() {
        return (/^(true|1)$/i).test(this);
    }
});
alert("true".com_example_bool);

(Ne fonctionne pas dans les navigateurs plus anciens de cours et Firefox affiche false, alors qu'Opera, Chrome, Safari et IE montrer un vrai. Bug 720760)

Prograide.com

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.

Powered by:

X