javascript - 变量输入变得无效并破坏 .charAt[]

标签 javascript function encoding radix charat

https://jsfiddle.net/2L4t9saq/180/ 是我的 fiddle

大部分代码都是无用的,我只是发布重要的内容

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((指数):40)

在 window.onload ((index):55)

为什么它一尝试将字符串输入到我的 charAt() 中就会中断?

ps:我确实理解当前状态下的代码,如果它有效,它只会输出最后 8 个字符的 rgba 值

最佳答案

容易犯错误。您通过执行 charAt[index] (使用方括号)来使用 charAt (这是一个函数),而不是 charAt(index) (使用圆括号)。解决这个问题应该可以解决您的问题。

另外 - 您通过在 JSFiddle 中执行 b36torgba(["7300002S7300002S"]) 来调用该函数,并尝试对其进行字符串操作。由于 ["7300002S7300002S"] 是一个数组,而不是字符串,因此 .charAt() 对其不起作用。尝试通过执行 b36torgba("7300002S7300002S") 来调用该函数。

关于javascript - 变量输入变得无效并破坏 .charAt[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51258986/

相关文章:

javascript - 解析 + Angular orderBy 问题

python - 在 Python 中, '<function at ...>' 是什么意思?

python - 如何在没有 list.extend 方法和没有 '+' 运算符的情况下扩展列表

sql - 将 Postgresql 数据库从包含混合编码类型的 SQL_ASCII 转换为 UTF-8

javascript - 鼠标滚轮滚动事件

javascript:查找 anchor 链接的绝对大小

arrays - 无法在函数内将 [Double] 转换为 Double

video - 通过 LAN 可实现的最低高清视频延迟是多少?

iis - 经典ASP中带问号的菱形字符

javascript - Mapbox 在拖动功能时防止 anchor 行为