Назначение -1 в String.fromCharCode(k)

У меня есть следующий фрагмент кода:

return (AllowableCharacters.indexOf(String.fromCharCode(k)) != -1);

Теперь я не совсем понимаю использование -1 в этом скрипте.

Сценарий читается следующим образом:

first String.fromCharCode(k) != -1 выполняется (k - это код клавиши, я динамически получаю его из какого-то другого скрипта).

Затем я получаю indexof(String.fromCharCode(k)!= -1) из AllowableCharacters.

Что представляет собой строку примерно так:

AllowableCharacters = "abc" ; 

Я также понимаю, что если indexof не может найти значение в приведенной выше строке, он возвращает -1.

Однако, возвращаясь к моему вопросу, почему -1 в сценарии?

ИЗМЕНИТЬ ::

Чтобы упростить мой вопрос, как бы вы прочитали следующую строку:

String.fromCharCode(k))!=-1

простым английским языком.

ИЗМЕНИТЬ 2::

Хорошо, я только что прочитал ответ Гуффы и сделал случайный скрипт для проверки, вот скрипт:

 var store = "abcdefgpS";

        function check_index(){
            console.log(store.indexOf(String.fromCharCode(83))); 
        };

в приведенной выше функции !-1 исключается, поэтому в console.log, если совпадение найдено, мы получаем indexOf, где был найден символ, и если совпадение не найдено, мы получаем -1.

СЕЙЧАС это не то, что нам нужно, мы хотим "сказать мне, есть ли значение" (возвратить true) или "сказать мне, есть ли значение там" (вернуть false).

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

 var store = "abcdefgpS";

        function check_index(){
            console.log(store.indexOf(String.fromCharCode(83)) !-1); 
        };

который дает вам истинные или ложные значения.

теперь как:

return (store.indexOf(String.fromCharCode(83)) !-1)

читать как:

if (store.indexOf(String.fromCharCode(83)) !-1){
      return true;
}else { return false; } 

Я не вижу оператор if в . return (store.indexOf(String.fromCharCode(83)) !-1);

Спасибо,

Александр


person Alexander Solonik    schedule 26.01.2015    source источник
comment
простой ответ: нельзя проверить на достоверность, потому что 0 является допустимым индексом, но не соответствует действительности. Таким образом, методы индексации используют -1 для обозначения того, что его не существует.   -  person charlietfl    schedule 26.01.2015
comment
@charlietfl посмотри мой edit2 . Спасибо .   -  person Alexander Solonik    schedule 26.01.2015


Ответы (2)


Вы ошиблись порядком выполнения.

Сначала оценивается это выражение: String.fromCharCode(k).

Предположим, что результатом является строка "b". Это используется в выражении: AllowableCharacters.indexOf("b").

Предположим, что символ находится во втором символе строки с индексом 1, поэтому результат равен 1. Это используется в выражении 1 != -1.

Поскольку 1 не равно -1, возвращается результат true.

Короче говоря, -1 сравнивается с результатом метода indexOf, поскольку методы возвращают -1, когда ничего не находят.


Это оператор сравнения !=, который приводит к тому, что значение будет true или false. Он сравнивает значения, и результат зависит от того, равны они или нет. Оператор if не нужен, чтобы преобразовать результат в true или false, это уже значение выражения сравнения.

Иногда вы видите такой код:

if (AllowableCharacters.indexOf(String.fromCharCode(k)) != -1) {
  return true;
} else {
  return false;
}

Оператор if в таких случаях излишен. Выражение в операторе if уже равно true или false, поэтому его можно вернуть напрямую:

return AllowableCharacters.indexOf(String.fromCharCode(k)) != -1;
person Guffa    schedule 26.01.2015
comment
+1 за ваш ответ, но не могли бы вы проверить мое редактирование 2. Пожалуйста, попробуйте отредактировать свой ответ и на этот мой вопрос, так как это часть, которая меня смущает. - person Alexander Solonik; 26.01.2015
comment
@AlexanderSolonik: я добавил некоторые дополнительные пояснения, надеюсь, они прояснят некоторые вещи. - person Guffa; 26.01.2015

Это условие, которое проверяет, разрешен ли символ. Он вернет boolean (результат сравнения).

Давайте сломаем это.

  1. Сначала мы получаем строку из символьного кода с String.fromCharCode. Предположительно, мы получили это от какого-то входного события.
  2. Затем мы получаем индекс этой результирующей односимвольной строки в AllowableCharacters, используя indexOf.
  3. Наконец, мы проверяем, равен ли этот результат -1. Тест оценивается как значение boolean, и оно может быть возвращено функцией, как и любое другое значение. Значение -1 указывает, что символ не разрешен, поэтому мы используем !=, чтобы определить, является ли символ допустимым.
person Alexis King    schedule 26.01.2015
comment
это своего рода оператор if ?? - person Alexander Solonik; 26.01.2015
comment
можно немного поподробней, я боролся с этим уже почти день. Спасибо. - person Alexander Solonik; 26.01.2015
comment
Это так, но не могли бы вы проверить мой Edit2 и попытаться ответить и на него, это был бы почти мой последний вопрос. - person Alexander Solonik; 26.01.2015