【问题标题】:localeCompare() strange behavior on mobile browser移动浏览器上的 localeCompare() 奇怪行为
【发布时间】:2016-10-17 03:38:46
【问题描述】:

localeCompare() 应该返回(-1、0 或 1),但是,以下代码在我的 PC 浏览器 Chrome 53 上返回“1”(如预期的那样),但在我的手机浏览器上返回“-8” Samsung Internet for Android 4.0,应该是现代浏览器!

var b = "aZ";
var a= "ab"
var res = b.localeCompare(a);
document.getElementById('alert').innerHTML =res;
<label id="alert">Ret</label>

还小提琴: https://jsfiddle.net/4a3rwem1/5/

在 JS 中比较字符串的任何替代(可能更全面)解决方案?

【问题讨论】:

  • 您的浏览器基于Servo,您可以在Github 上报告此问题,因为显然Servo 应该支持localeCompare
  • 谢谢@adeneo,我做到了!

标签: javascript string cross-browser mobile-browser


【解决方案1】:

您可以使用较小或较大的符号来比较字符串,例如 MDNSuggest

+(a > b) || +(a === b) - 1

var a = "ab",
    b = "aZ",
    aa = a.toLowerCase(),
    bb = b.toLowerCase(),
    res = +(a > b) || +(a === b) - 1;

console.log(res);

【讨论】:

  • 它仍然是错误的。 -8 0。我刚刚在我的 S7 上进行了测试,使用三星的浏览器确实返回 -8。简单的解决方案在三星上使用 Chrome,或向三星发送错误报告并希望最好。
  • 你从哪里得到 8?
  • 你是什么意思?,OP的问题-> but -8 on my cell phone's browser
  • 谢谢两位。我对此进行了测试。 @Nina,这不能正常工作。考虑一下:jsfiddle.net/4a3rwem1/8
  • 我没有。这些是 Firebase ID (firebase.googleblog.com/2015/02/…)
猜你喜欢
  • 2016-07-16
  • 2016-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-08
  • 1970-01-01
  • 2012-07-15
  • 1970-01-01
相关资源
最近更新 更多