2016-02-01 1 views
0

J'apprends les bases de JavaScript. Je suis confus au sujet des résultats de "vérité" et "falsey". Quelqu'un peut-il dire la raison de cela?Les résultats de "truthy" et "falsey" sont source de confusion en JavaScript

myVariable = undefined ? "truthy" : "falsey"; 

Le résultat est "Falsey".

myVariable = typeOf someUndefinedVariable ? "truthy" : "falsey"; 

Le résultat est "truthy".

Je m'attendais à "falsey" à la place pour le second résultat. Pourquoi ai-je été "véridique"? Je suis vraiment confus.

+0

Sous quel environnement exécutez-vous ce code? Pour moi, votre deuxième extrait déclenche une exception et donc 'myVariable' ne sera jamais affecté' 'truthy'' ou' 'falsey''. Êtes-vous sûr que 'someUndefinedVariable' n'est pas défini? –

+0

@PeterHorne J'utilise juste notepad ++, oui je suis sûr que someUndefinedVariable n'est pas défini –

Répondre

2

typeof retourne le type nom de la valeur, ce qui est toujours une chaîne non vide. Une chaîne non vide est truey.

> typeof someUndefinedVariable 
"undefined" 
> typeof (typeof someUndefinedVariable) 
"string" 
> Boolean("undefined") 
true 

Voir aussi All falsey values in JavaScript

0

D'abord, je vais vous expliquer ce qui est arrivé dans le code que vous avez montré, juste pour être sûr que vous le comprenez. Peut-être que vous comprenez déjà la première moitié, mais puisque vous dites que vous êtes très confus, je suppose que vous ne le faites pas.

myVariable = undefined ? "truthy" : "falsey"; 
// result: "falsey" 

Ici, vous êtes à la recherche d'une valeur, undefined et poser une question: est-il truthy ou Falsey? Basé sur cela, vous choisissez une chaîne. Ensuite, vous stockez cette chaîne dans myVariable. Il est effectivement le même que ce code:

var myVariable; 
if (undefined) { 
    myVariable = 'truthy'; 
} else { 
    myVariable = 'falsey'; 
} 

Depuis undefined est toujours Falsey, à la fin, myVariable contient la chaîne 'falsey'.

Voici votre deuxième extrait de code:

myVariable = typeOf someUndefinedVariable ? "truthy" : "falsey"; 
// result: "truthy" 

D'abord, je dois souligner que typeOf n'est pas une fonction valide ou opérateur dans une exécution Javascript que je connaisse. Je vais supposer que c'était une faute de frappe, et vous vouliez utiliser typeof à la place. Le code ci-dessus, comme écrit, devrait lancer une erreur de syntaxe. Correction, nous avons ...

myVariable = typeof someUndefinedVariable ? "truthy" : "falsey"; 
// result: "truthy" 

Et pour plus de clarté, nous allons réécrire comme un if/else:

var myVariable; 
if (typeof someUndefinedVariable) { 
    myVariable = 'truthy'; 
} else { 
    myVariable = 'falsey'; 
} 

Comme autre answerer a pointed out, typeof retournera toujours, comme une chaîne , le type du symbole que vous lui donnez.

typeof(someUndefinedVariable); 
"undefined" 

Et puisque toutes les chaînes sauf la chaîne vide sont véridiques, vous récupérez la vérité.

Il n'y a que 7 valeurs Falsey en Javascript.

false    Boolean false 
undefined   If a symbol is not defined at all 
null    A defined symbol, but it has no value inside 
0     Numeric positive 0 
-0     Numeric negative 0 
'' or ""   Empty string 
NaN     Magic value "Not a Number" 

Toutes les autres valeurs en Javascript sont truthy.

  • toute chaîne sauf chaîne vide
  • un nombre quelconque à l'exception 0
  • toute matrice, y compris un tableau vide
  • tout objet, y compris un objet vide
  • fonctions
  • etc ...