【问题标题】:javascript problem with implicitly typed variables隐式类型变量的javascript问题
【发布时间】:2011-08-29 18:57:22
【问题描述】:

请原谅这个新手问题(Javascript 新手!)。

在一个 html 页面中,我有一组带有名称和编号的图像:img1 img2 img3... img12... 还有一个 JS 函数,我需要从(比如说)img5 迭代到最后一个 img。

如果我这样写:

function iterateImg(objImgID) {var imgNum = objImgID.replace("img","");
    for (i=imgNum+1;i<20;i++)
    .../...

变量“i”被视为一个字符串,如果传递的对象的ID是img5,则i+1接收值“51”。

当然,我仍然可以从 1 迭代到 n,并且仅在 i 的值达到 6 时执行所需的任务,但这将是一个丑陋的修复。

请问我该如何解决这个问题?在将其用作种子之前,如何创建一个将被视为整数的变量? 此外,您会推荐什么作为最佳做法?

【问题讨论】:

  • 别忘了用 var 声明 'i'。如果不这样做,“i”可能会附加到全局范围(窗口)。

标签: javascript variables typed


【解决方案1】:
var imgNum = Number(objImgID.replace("img",""));

这样就可以了。

或者更好(因为我喜欢正则表达式)

var imgNum = Number(objImgID.match(/[0-9]+/));

【讨论】:

  • 伙计们,我必须把你们全都给坦克了!不到 10 分钟 4 个答案,太棒了!
  • 使用NumberparseInt 有功能上的区别还是只是风格问题?
  • 对于那些感兴趣的人。看起来至少有一个小的功能差异。例如 Number(true) === 1parseInt(true) 结果为 NaN
【解决方案2】:

使用parseInt将字符串转换为数字

var imgNum = parseInt(objImgID.replace("img", ""));

【讨论】:

    【解决方案3】:

    有几种方法可以强制 JavaScript 将其转换为数字

    • parseInt(x, 10) - 10 是数字的底数
    • x - 0 - 减法仅适用于数字
    • x * 1 - 也相乘

    【讨论】:

      【解决方案4】:
      var imgNum = parseInt(objImgID.replace("img",""), 10);
      

      现在当你做var i=imgNum+1时,它会执行两个整数的加法。

      【讨论】:

      • 好吧,你们为什么使用parseInt() 而不是Number()?我会假设有某种速度方面的东西吗?
      • @Joseph,性能相当,但如果您对具体数字感兴趣,请看这里:jsperf.com/number-vs-parseint-vs-plus/3
      猜你喜欢
      • 2011-10-06
      • 1970-01-01
      • 2012-12-13
      • 1970-01-01
      • 2010-10-13
      • 1970-01-01
      • 2017-08-13
      • 2011-08-30
      • 1970-01-01
      相关资源
      最近更新 更多