#javascript #if-statement
#javascript #if-statement
Вопрос:
Мне интересно, почему «if (ethos [name])» уже достаточно? Потому что я бы написал if(name=ethos[имя]). Что это значит? Спасибо.
var ethos = {
achilles: "glory",
aeneas: "duty",
hades: null // Beyond human understanding
}
function printEthos (name) {
if (ethos[name]) {
console.log(ethos[name]);
} else {
console.log(name " has no recorded ethos.");
}
}```
Комментарии:
1. «Потому что я бы написал if(name=ethos[имя])» — что, скорее всего, не делает того, что вы думаете.
=
является оператором присваивания,==
и===
приведены для сравнения.2. Тот факт, что
ethos[name]
содержит значение, приводит к тому, что условие if выполняетсяtrue
. Если бы значение было null, пустой строкой или 0, это было быfalse
.3. Это работает, потому что в JavaScript есть концепция истинных и ложных значений.
4.
if(name=ethos[name])
возможно, проверяет ту же «истинность» значения, хранящегося вethos[name]
, но также присваивает значение name.5. Спасибо, думаю, теперь я знаю, почему 🙂
Ответ №1:
JavaScript имеет 7 ложных значений 0
, 0n
, null
, undefined
false
, NaN
''
,, и пустую строку,,,,,,,,,,,,,,,. В вашем случае ваш if
возвращает undefined
одно из ложных значений, поэтому if (esthos[name])
этого достаточно для оценки ложного условия.
console.log(esthos[name]) //-> undefined
или, как сказал @Titulum…
console.log(!!esthos[name]) //-> false
Таким же образом вы можете проверить, пуст ли массив, только с помощью if(esthos.length)
:
const esthos = []
console.log(esthos.length) //-> 0 which is a falsy value
// or
console.log(!!esthos.length) //-> false
if (esthos.length)
достаточно, потому что это вернет 0
одно из ложных значений в JavaScript или число, отличное от 0
, которое является истинным.
Комментарии:
1. Вы правы @pilchard, внесли исправление. Спасибо.
2. не беспокойтесь, вы были правы, этого
if(esthos.length)
достаточно, простоconsole.log(esthos.length)
печатается0
, даже если вif()
операторе оно будет равно false.
Ответ №2:
if (esthos[name])
проверяет, является ethos[name]
ли truthy
значение, хранящееся в. Чтобы явно преобразовать его в a boolean
, вы можете сделать if (!!esthos[name])
. Причина этого в том, что javascript использует значения truthy
и falsy
.
Комментарии:
1. «Причина этого в том, что javascript использует истинные значения вместо реальных true и false» — Это неправда… Существуют значения, которые будут обрабатываться как
true
/false
в определенных условиях при использовании в таком условии, какif (...)
2. »
if (esthos[name])
проверяет, содержит ли переменная значение». — Это неправда. Значение вesthos[name]
будет вычислено. Еслиesthos[name]
это ложное значение, то оно все равно будет рассматриваться какfalse
(или наоборот)3. Обновил мой ответ, нет причин относиться к нему так враждебно.