2016-02-01 1 views
0

Я изучаю основы JavaScript. Я смущен результатами «правды» и «ложности». Может ли кто-нибудь объяснить причину этого?Результаты «правды» и «ложности» запутываются в JavaScript

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

В результате "falsey".

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

В результате "truthy".

Я ожидал «ложь» вместо второго результата. Почему я стал «правдивым»? Я действительно смущен.

+0

В какой среде вы используете этот код? Для меня ваш второй фрагмент вызывает исключение, поэтому 'myVariable' никогда не будет присваиваться ни« правдивым », ни« ложным ». Вы уверены, что 'someUndefinedVariable' не определен? –

+0

@PeterHorne Я использую только блокнот ++, да, я уверен, что someUndefinedVariable не определен –

ответ

2

typeof возвращает имя типа значения, которое всегда непустая строка. Непустая строка: правша.

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

Смотрите также All falsey values in JavaScript

0

Во-первых, я объясню, что случилось в коде вы показали, просто чтобы убедиться, что вы его понимаете. Возможно, вы уже понимаете первую половину, но, поскольку вы говорите, что вы очень смущены, я предполагаю, что вы этого не сделаете.

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

Здесь вы смотрите на значения, undefined, и задает вопрос: это truthy или falsey? Исходя из этого вы выбираете строку. Затем вы сохраняете эту строку в myVariable. Это фактически то же самое, как этот код:

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

Поскольку undefined всегда falsey, в конце концов, myVariable содержит строку 'falsey'.

Вот ваш второй фрагмент кода:

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

Во-первых, я должен отметить, что typeOf не является допустимым функции или оператора в любом выполнения Javascript я знаю. Я предполагаю, что это была опечатка, и вместо этого вы использовали вместо этого typeof. Приведенный выше код, как написано, должен вызывать синтаксическую ошибку. Исправлено, у нас есть ...

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

И для наглядности, давайте перепишем его как если/иначе:

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

В другом отвечающем имеют pointed out, TypeOf всегда будет возвращать, как строка , тип символа, который вы ему даете.

typeof(someUndefinedVariable); 
"undefined" 

И поскольку все строки, за исключением пустой строки, являются правдивыми, вы получаете правдивые ответы.

В Javascript есть только 7 значений false.

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" 

Все остальные значения в JavaScript, являются truthy.

  • любая строка за исключением пустой строки
  • любое число, кроме 0
  • любого массива, включая пустой массив
  • любой объект, включая пустой объект
  • функций
  • и т.д. ...
Смежные вопросы