Сегодня я попытался сократить выражение if следующим образом:
if (fruit == "apple" || type == "pear" || type == "orange"){
до этого:
if (fruit in ["apple", "pear", "orange"]){
Это не такРабота.У Джонатана Снука есть другое решение здесь , где он по существу использует карту, подобную этой, которая работает:
if(fruit in {"apple":"", "pear":"", "orange":""}){
Почему это работает, и мой простой массивне, когда обычно в Javascript присутствие объекта заставляет этот объект возвращать истину?Является ли строка объектом другого типа, чем ключ?Я думал, что присутствие строки в моем массиве также вернет true.
y = "Stackoverflow";
y && console.log('y is true') // y returns true, so console logs the message
Я интерпретировал свое первоначальное решение как «если значение переменной fruit находится в этом массиве».Это явно не тот случай.Вместо этого он говорит "если сама переменная fruit находится в этом массиве?"Нет, потому что это тоже не работает:
if (fruit in [fruit, "apple", "pear", "orange"]){
Так что же такое версия Snook с картой key => value, спрашивающей, что это правильно?Мое лучшее предположение - «если ключ под именем значения переменной fruit на этой карте возвращает true?»