【问题标题】:JavaScript cross-browser: Is it safe to treat a string as array?JavaScript 跨浏览器:将字符串视为数组是否安全?
【发布时间】:2011-04-08 19:26:23
【问题描述】:

这段代码在所有主流浏览器中都安全吗?

var string = '123'
alert(string[1] == '2') // should alert true

【问题讨论】:

  • jw.你为什么要这样做,这也是优化的。不是抨击……只是好奇。 alert(string.indexOf("2") != -1);
  • @Tim:因为那不是一回事?您的条件检查它是否出现在字符串中。他正在检查字符串中特定位置的值。如果你做了 string.indexOf("2") == 1) 那将是同样的事情。
  • @Tim 当你做 IndexOf('2') != -1。所有这一切都告诉你,'2' 存在于字符串中的某个位置。它不验证 '2' 是索引 1。

标签: javascript arrays string cross-browser


【解决方案1】:

不,这不安全。 Internet Explorer 7 不支持按索引访问字符串。

你必须使用charAt方法才能兼容IE7:

var string = '123';
alert(string.charAt(1) == '2');

【讨论】:

  • 真棒抓到 Guffa。我不知道 IE 7 不支持按索引排列的字符串。
  • 我认为它在所有方面都有效——很好地发现了这一点
【解决方案2】:

JavaScript 中的一切都是对象;数组、函数、字符串,应有尽有。您提交的代码是完全有效的,虽然有点令人困惑 - 有更好的方法来做到这一点

var str = '123';
str[1] === '2'; // true, as you've just discovered (if you're not in IE7)
// Better ways:
str.indexOf('2'); // 1
str.charAt(1); // '2'
str.substr(1, 1); // '2'
str.split(''); // ['1', '2', '3']

更好的方法是确保其他人阅读您的代码(在 6 个月内是其他人或您自己)不会认为 str 是一个数组。它使您的代码更易于阅读和维护

【讨论】:

  • 同意。它是有效的,但它可能会让人们认为您使用的是数组而不是字符串。当有许多其他不那么模棱两可的方法时,不想牺牲代码的可读性。
  • 没有为每个浏览器中的数组实现 indexOf 方法(咳咳 IE 咳咳)
  • Array.prototype.indexOf 获得有限但不断增长的支持。 String.prototype.indexOf 已经存在一段时间了。
  • 当前所有浏览器也不支持按索引访问字符串。 (遗憾的是,IE7 仍然必须被认为是最新的......)
  • 我已经更新了我的笔记。我给了你 +1 的发现,Guffa
【解决方案3】:

我在 IE7、IE8、Safari、Chrome 和 FF 中进行了测试。一切正常!

编辑 只是为了好玩,它也适用于 Konqueror! Js Fiddle example

【讨论】:

  • 你是如何在 IE7 中测试它的?我在 IE7 中对其进行了测试,它不起作用
  • 咳嗽 IE8/7 兼容!= IE7 咳嗽
【解决方案4】:

我真的不明白为什么你不能这样做......虽然你可以使用 .substring()

【讨论】:

    【解决方案5】:

    它会起作用的。如果您决定使用浏览器特定的功能,这可能是个问题(I.E xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 仅适用于 Internet Explorer)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-09
      • 1970-01-01
      • 2013-11-08
      • 1970-01-01
      • 2021-01-14
      • 2011-08-02
      • 2010-09-23
      • 2013-01-02
      相关资源
      最近更新 更多