Dunaevlad
@Dunaevlad

Как понять следующее выражение на JS?

for (var e, r = t.length, n = "", i = 0, s = 0, a = 0; i < r; )
      (s = t.charCodeAt(i)) < 128 ? (n += String.fromCharCode(s),
       i++) : s > 191 && s < 224 ? (a = t.charCodeAt(i + 1)


Плохо знаком с условным тенарным оператором..
в for прописываются перемнные и условие, при котором работает цикл, а дальше?
Переменная s равняется int(t.charCodeAt(i)) если int(t.charCodeAt(i)) < 128...
  • Вопрос задан
  • 159 просмотров
Решения вопроса 2
dollar
@dollar
Делай добро и бросай его в воду.
Если: s = t.charCodeAt(i)) < 128
То: (n += String.fromCharCode(s), i++)
Иначе: s > 191 && s < 224 ? (a = t.charCodeAt(i + 1) и дальше до конца.

Тернарный оператор (в отличие от обычного if-else) имеет значение, но значение выражений и функций можно отбрасывать.
Выражение: 1;
будет верно, хотя оно и не имеет смысла, потому что результат отбрасывается, а само оно ничего не делает при этом.
Такое: 1, 2;
тоже верно, и такое: 1; 2;
тоже.
Тернарный оператор это всего лишь A ? B : C, где А,B,C - какие-то выражения. Так что можно записывать вместо if-else с отбрасыванием значения:
x > 5 ? x-- : x++
В случае обфускации может быть сложнее, типа A ? B : C ? D : E ? F, и скобки могут быть особым образом расставлены или специально опущены.

P.S. Если в чём-то сомневаетесь, экспериментируйте, например, в консоли браузера. Легко сможете понять, как работает какая-то сложная штука в JS.
Ответ написан
sergiks
@sergiks Куратор тега JavaScript
♬♬
Код можно расписать подробнее примерно так:
var e;
var r = t.length;
var n = '';
var i = 0;
var s = 0;
var a = 0;
// for (; i < r; ) {
while (i < r) {
  s = t.charCodeAt(i);
  if (s < 128) {
    n += String.fromCharCode(s);
    i++;
  } else {
    if (s > 191 && s < 224) { 
      // это заглавные кириллические буквы в Win1251

      a = t.charCodeAt(i + 1);
      // дальше код оборвался, приведён не полностью
    }
  }
}
фрагмент кода приведёт не полный, поэтому и «распаковка» не полна.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы