【问题标题】:Is there a way to get charCode from an individual character?有没有办法从单个字符中获取 charCode?
【发布时间】:2016-02-22 18:40:18
【问题描述】:

我喜欢函数String.prototype.charCodeAt,但由于它是String 上的一个方法,所以你必须提供一个索引参数。我知道 Ecmascript 不处理单个字符,但是否有任何 "native" 方法可以直接从一个字符获取 charCode? str[0].charCode() 之类的东西或任何考虑 1 长度字符串的东西?

【问题讨论】:

  • 使用"s".charCodeAt(0)有什么问题?
  • @MysterX 从语义上讲,这没有意义。而且我认为它的性能不如 teorically char 实现,因为它做了一种计算。例如,在 C 中,我们可以简单地使用绑定名称本身,它是一个原始值。最后但同样重要的是,它很冗长。
  • JS中没有Char类型;您的问题听起来像是您认为有或希望有,但实际上没有。
  • @Mathletics 实际上我在想一种纯粹使用它的方式,而不是像一个对象。例如,要验证一个字符是否介于'A''Z' 之间,例如if(str[0] >= 65 && str[0] <= 90) 而不是if(str.charCodeAt(0) >= 65 && str.charCodeAt(0) <= 90)
  • 从你的例子中,你可以做if ('A' < str[0] && str[0] < 'Z') { ... }

标签: javascript string char ecmascript-6


【解决方案1】:

您应该首先定义在您的情况下 charCode 是什么意思。 JS 使用 UTF-16 编码的字符串,因此 charCodeAt 是该位置的 UTF-16 代码单元的值。最初 JS 使用 UCS2 子集,charCodeAt() 对此非常有意义。不再支持完整的 UCS4 编码为 UTF-16。

从字符串中获取真正的 UNICODE 代码点(是你的那个 charCode 吗?)的唯一方法是使用 ES6 及其字符串枚举功能:

for (let ch of str) { ch here is real UNICODE code point }

注意,上面的迭代次数可能比 str.length 少。

然后检查String.prototype.codePointAt()

【讨论】:

  • 在这种情况下,ch 将是一个数字或字符串还是什么?
  • 这将是一个字符串,但 for (let ch of 'x\uD83D\uDE80y') { console.log(ch.codePointAt(0).toString(16)); } 会给你一个数字。
【解决方案2】:

有没有直接从一个字符获取 charCode 的本地方法?

没有。正如你所说,EcmaScript 并没有专门处理“一个字符”的事情。

如果你需要处理单个字符,你可以很容易地直接将它们存储为数值,并且只有当你有它们的序列时才将它们转换为字符串。

类似str[0].charCode()

嗯,看起来你真的想在这里使用str.charCodeAt(0)

【讨论】:

    【解决方案3】:
    String.prototype.charCode = function(){
        return this.charCodeAt(0).toString(16);
    }
    

    那你就可以了 str[0].charCode();

    【讨论】:

    • 对不起,我没有指定,但我正在寻找一种更原生的方式。我不想自己实现它。我知道怎么做,但这不是我的本意。
    • 从现在开始你从哪里得到 (i)?
    • 我错了,抱歉把 i 改成 0
    • 这种变化更没有意义。
    • 小提琴有效,将您的 char 值返回为十六进制,但您可以更改它。
    猜你喜欢
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多