в javascript,
var a = '';
var b = (a) ? true : false;
var b
будет установлен в false
.
это определенное поведение, на которое можно положиться?
javascript
string
boolean
cc молодой
источник
источник
false
здесь: jsfiddle.net/8CKbd''
оценивается как false в логическом контексте, поэтому ifa = '';
thena ? false : true
=>'' ? false : true
=>false ? false : true
=>true
(потому что это оценка для ложного значения). Я думаю, чтоvar b = (a) ? true : false;
следующее утверждение должно быть правильным.Ответы:
Да. Javascript - это диалект ECMAScript, и спецификация языка ECMAScript четко определяет это поведение:
Цитата взята из http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
источник
new String("")
правда! Это потому, что это объект, тогда как краткая форма""
представляет версию с примитивным значением. То же касаетсяnew Number(0)
и дажеnew Boolean(false)
. Это веская причина не использовать версии объекта в вашем коде, и это означает, что онif (str.length)
обрабатывает этот крайний случай, тогда какif (str)
не будет.Да. Все
false
,0
пустые строки''
и""
,NaN
,undefined
, иnull
всегда оценивается какfalse
; все остальное естьtrue
.И в вашем примере b
false
после оценки. (Думаю, вы ошибочно написалиtrue
)источник
null
неfalse
, ниtrue
,null
неnull
. jsfiddle.net/sq1Lkpg0NaN
иundefined
. Это не так,false
но они лживы. Об этом и спросили.Как ответил выше, да , то есть определяется поведение пустой строкой в условное (в
if
выражении||
,&&
,? :
, ...). (В стандарте говорится, что должна применяться внутренняя операция ToBoolean .)Оценка отличается, когда в сравнении используется пустая строка (см. Истина, Равенство и JavaScript ), хотя результаты в основном одинаковы :
Объяснение: По существу, когда операнды
==
имеют разные типы, JavaScript старается изо всех сил , чтобы преобразовать их в числа, в зависимости от их стоимости ( с использованием ОПЕРАЦИЙ стандартные вызовы ToNumber и ToPrimitive ), а затем он применяется внутренне===
. Но при===
прямом использовании типы не преобразуются, поэтому всегда можно сравнивать String с Booleanfalse
.Грубо говоря, условные выражения JavaScript ( ToBoolean ) проверяют определенное, ненулевое, ненулевое, непустое, ненулевое значение (пустая строка ... пуста, числа -0 или +0 ... ноль, NaN не определенное число, но пустой объект, по- видимому , не очень пустой), или , как мне нравится думать, условный тест для а (истинных) вещей , в то время как
==
сравнивает кажущиеся, тщательно преобразованные значения ( ToPrimitive , ToNumber ) из его операнды и===
ищет точное совпадение .Есть больше примеров в Истине, Равенстве и JavaScript, где это различие действительно имеет значение, например
'0'
,true
в условном (ненулевая длина, или, это вещь ), ноfalse
в==
сравнении ( значение равно нулю).'1'
опять же, естьtrue
в обоих случаях (это вещь и имеет ненулевое значение).источник
var b
будет установлен вtrue
. Это связано с тем, что пустая строка считается значением «ложь» в JavaScript, как и некоторые другие значения.Пожалуйста, посмотрите http://www.sitepoint.com/javascript-truthy-falsy/ на предмет ложных значений.
источник
var b
на самом деле будет установлено значение,true
потому что это противоположно тому,var a
если вы посмотрите на код.источник