Ввод переменных обнуляется и ломается.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")
вместо.