变量输入变得无效并破坏 .charAt[]
variable input becoming nullified and breaking .charAt[]
https://jsfiddle.net/2L4t9saq/180/ 是我的 fiddle
大部分代码都是无用的,只有 post 重要的东西
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,基数 36 中的 73 是 255),但在它可以执行任何操作之前,它在尝试查找字符串中的字符时中断,并表示此语法错误:
未捕获类型错误:无法读取未定义的 属性“0”
在 b36torgba ((index):40)
at window.onload ((index):55)
为什么它在尝试将字符串输入我的 charAt() 时立即中断?
ps:我理解当前状态下的代码,如果有效,它只会输出最后 8 个字符的 rgba 值
容易出错。您通过执行 charAt[index]
(使用方括号)而不是 charAt(index)
(使用圆括号)来使用 charAt
(这是一个函数)。解决这个问题应该可以解决您的问题。
此外 - 您通过在 JSFiddle 中执行 b36torgba(["7300002S7300002S"])
来调用该函数,并尝试对其进行字符串操作。由于 ["7300002S7300002S"]
是一个数组,而不是一个字符串,因此 .charAt()
不会对它起作用。尝试通过执行 b36torgba("7300002S7300002S")
来调用该函数。
https://jsfiddle.net/2L4t9saq/180/ 是我的 fiddle
大部分代码都是无用的,只有 post 重要的东西
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,基数 36 中的 73 是 255),但在它可以执行任何操作之前,它在尝试查找字符串中的字符时中断,并表示此语法错误:
未捕获类型错误:无法读取未定义的 属性“0”
在 b36torgba ((index):40)
at window.onload ((index):55)
为什么它在尝试将字符串输入我的 charAt() 时立即中断?
ps:我理解当前状态下的代码,如果有效,它只会输出最后 8 个字符的 rgba 值
容易出错。您通过执行 charAt[index]
(使用方括号)而不是 charAt(index)
(使用圆括号)来使用 charAt
(这是一个函数)。解决这个问题应该可以解决您的问题。
此外 - 您通过在 JSFiddle 中执行 b36torgba(["7300002S7300002S"])
来调用该函数,并尝试对其进行字符串操作。由于 ["7300002S7300002S"]
是一个数组,而不是一个字符串,因此 .charAt()
不会对它起作用。尝试通过执行 b36torgba("7300002S7300002S")
来调用该函数。