比较两个字母returns false,但它们的unicode字符相同
Comparing two letters returns false, but their unicode character is the same
(这是什么魔法?)
我有两个看起来一样的字符,但是当做比较时它们是不同的:
console.log("i" === "i︆") // false
然后我比较了他们的代码,告诉我它是一样的,这更奇怪:
console.log("i".charCodeAt(0), "i︆".charCodeAt(0)) // 105 105
但最后我发现了问题,两个字符的长度不一样:
console.log("i".length, "i︆".length) // 1 2
我在想:
- 有没有解释为什么两个字符的长度不一样?
- 有没有办法转换两个字符以便比较有效?
第二个在位置 1 有一个不可见的字符 (65030)。
console.log("i︆".charCodeAt(0), "i︆".charCodeAt(1))
这意味着它们 'strictly' 不相等。
第二个字符有一个编码为65030的不可见字符,属于Unicode标准的"VARIATION SELECTOR"块。
当我复制你的例子时,我得到了相同的结果,但是当你输入它时,它会给出 TRUE。
复制粘贴的结果:
console.log("i".charCodeAt(0),"i".charCodeAt(1),"i︆".charCodeAt(0),"i︆".charCodeAt(1),"i︆".charCodeAt(2))
105 NaN 105 65030 NaN
(这是什么魔法?)
我有两个看起来一样的字符,但是当做比较时它们是不同的:
console.log("i" === "i︆") // false
然后我比较了他们的代码,告诉我它是一样的,这更奇怪:
console.log("i".charCodeAt(0), "i︆".charCodeAt(0)) // 105 105
但最后我发现了问题,两个字符的长度不一样:
console.log("i".length, "i︆".length) // 1 2
我在想:
- 有没有解释为什么两个字符的长度不一样?
- 有没有办法转换两个字符以便比较有效?
第二个在位置 1 有一个不可见的字符 (65030)。
console.log("i︆".charCodeAt(0), "i︆".charCodeAt(1))
这意味着它们 'strictly' 不相等。
第二个字符有一个编码为65030的不可见字符,属于Unicode标准的"VARIATION SELECTOR"块。 当我复制你的例子时,我得到了相同的结果,但是当你输入它时,它会给出 TRUE。 复制粘贴的结果:
console.log("i".charCodeAt(0),"i".charCodeAt(1),"i︆".charCodeAt(0),"i︆".charCodeAt(1),"i︆".charCodeAt(2))
105 NaN 105 65030 NaN