Ввод переменных обнуляется и ломается.charAt[]

https://jsfiddle.net/The95Chaps/2L4t9saq/180/ моя скрипка

большая часть кода просто бесполезна, просто постить то, что имеет значение

var baseConverter = function(r, e, n) {
  var o = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  if (e <= 0 || e > o.length || n <= 0 || n > o.length) return console.log("Base unallowed"), null;
  var l, t = 0;
  if (10 != e) {
    var a = r.length;
    for (l = 0; l < a; l++) {
      var u, f = -1;
      for (u = 0; u < o.length; u++)
        if (r[l] == o[u]) {
          f = 1;
          break
        }
      if (u >= e) return console.log("Symbol unallowed in baseform"), null;
      if (-1 == f) return console.log("Symbol not found"), null;
      var s = a - l - 1;
      t += 0 == s ? u : u * Math.pow(e, s)
    }
  } else t = parseInt(r);
  if (10 != n) {
    for (var g = []; t > 0;) {
      var i = t % n;
      if (i < 0 || i >= o.length) return console.log("Out of bounds error"), null;
      g.push(o[i]), t = parseInt(t / n)
    }
    return g.reverse().toString().replace(/,/g, "")
  }
  return t.toString()
}

var b36torgba = function(input) {
  for (var i = 1; i < (input.length / 8) + 1; i++) {
    var arr = input
    var r = arr.charAt[0 + (i - 1) * 8] + "" + arr.charAt[1 + (i - 1) * 8]
    var g = arr.charAt[2 + (i - 1) * 8] + "" + arr.charAt[3 + (i - 1) * 8]
    console.log(g.charAt[2])
    var b = arr.charAt[4 + (i - 1) * 8] + "" + arr.charAt[5 + (i - 1) * 8]
    console.log(b)
    var a = arr.charAt[6 + (i - 1) * 8] + "" + arr.charAt[7 + (i - 1) * 8]
    console.log(a)
    var rrgba = baseConverter(r, 36, 10)
    var grgba = baseConverter(r, 36, 10)
    var brgba = baseConverter(r, 36, 10)
    var argba = baseConverter(r, 36, 10)
    var bigMessOfAVariable = "rgba(" + rrgba + "," + grgba + "," + brgba + "," + argba + "),"
    return bigMessOfAVariable;
  }
}

Вы можете игнорировать верхнюю функцию, все, что это - скрипт базового конвертера, который принимает три входа, вход, базу его вход и базу, в которую он должен быть преобразован: например, baseConverter(73,36,10) выведет 255.

Теперь проблема с моим b36torgba функция. он будет принимать строку, которая гарантированно будет иметь длину, равную 0, 8 или кратную 8, это просто стандартизация, чтобы убедиться, что все работает гладко, без 700 indexOf[] функции.

он принимает входные данные и делит их на 8, это говорит функции, сколько байт ей нужно пройти, и сколько он будет выплевывать, поэтому строка "[7300002S7300002S]" должен (делится на 8) выводить 2, поэтому скрипт выполняет 2 итерации.

в настоящее время он должен принимать строку и присваивать каждой группе из 2 символов (опять же, стандартных) определенную переменную, это позволит всем ее ставить в конец и выводить как ту же строку, но в базовой 10 rgba (следовательно, 73 используется, 73 в базе 36 - 255), но, прежде чем он может сделать что-либо из этого, он прерывается, когда пытается найти символы в строке, говоря синтаксическую ошибку:

Uncaught TypeError: Невозможно прочитать свойство '0' из неопределенного

на b36torgba ((индекс): 40)

at window.onload ((index): 55)

почему он прерывается, как только он пытается передать строку в мои charAt()?

PS: я понимаю, что код в его текущем состоянии, если бы он работал, он только вывел бы значение rgba из последних 8 символов

1 ответ

Решение

Легкая ошибка. Вы используете charAt (что является функцией), делая charAt[index] (используя квадратные скобки), а не charAt(index) (используя круглые скобки). Устранение этого должно решить вашу проблему.

Кроме того - вы вызываете функцию, выполнив b36torgba(["7300002S7300002S"]) в вашем JSFiddle, и пытается выполнить на нем манипуляции со строками. поскольку ["7300002S7300002S"] это массив, а не строка, .charAt() не будет работать над этим. Попробуйте вызвать функцию, выполнив b36torgba("7300002S7300002S") вместо.

Другие вопросы по тегам