将js中的单词与非常奇怪的结果进行比较
comparing words in js with very strange result
我有一个波斯语单词,我从文本中复制了一个并在键盘上写下了另一个:
a = 'ﺧﻮاب'
"ﺧﻮاب"
b='خواب'
"خواب"
//lets compare
a==b
false
谁能解释一下为什么? (你可以自己测试!)
找出此类差异的最简单方法是将其粘贴到文本编辑器中。
您可以看到这些字符导致了一些不同的结果:
你也可以用十六进制编辑器看一下,看看它们的十六进制代码是不一样的。您会注意到字符串的前两个字符不同。
他们的前2个字母是不同的字符。
var a = 'ﺧﻮاب';
var b = 'خواب';
for ( var i = 0; i < a.length; i++ ){
console.log(a.charCodeAt(i));
}
for ( var i = 0; i < b.length; i++ ){
console.log(b.charCodeAt(i));
}
a is [65191, 65262, 1575, 1576]
b is [1582, 1608, 1575, 1576]
现在,如果我尝试此代码:
var a = 'ﺧﻮاب';
var b = a; // Or you can copy and paste `a` value here.
a == b; // This will return `true`
前两个字符不同,您可以在浏览器的控制台中通过 运行 a.split('') 和 b.split('') 查看差异。
每个序列的前两个字符不同:
a
: U+FEA7 U+FEEE ...
b
: U+062E U+0648 ...
之所以看起来一样,是因为a
使用了b
中字符的"presentation form"个版本,用来标记字符的加入组(例如首字母) ,中间或最终)。在这种情况下,ARABIC LETTER KHAH INITIAL FORM
和 ARABIC LETTER WAW FINAL FORM
。一旦由字体渲染器(ARABIC LETTER KHAH
和 ARABIC LETTER WAW
)塑造,这些将与 b
中的字符具有相同的视觉外观。
a
中的这些表示形式字符仅存在于 Unicode 中以实现向后兼容性(Unicode 现在使用不同的机制对加入组进行编码),并且在规范上等同于 b
中的字符。 a
中的字符将在规范化形式C下被规范化为b
中的字符。
我有一个波斯语单词,我从文本中复制了一个并在键盘上写下了另一个:
a = 'ﺧﻮاب'
"ﺧﻮاب"
b='خواب'
"خواب"
//lets compare
a==b
false
谁能解释一下为什么? (你可以自己测试!)
找出此类差异的最简单方法是将其粘贴到文本编辑器中。
您可以看到这些字符导致了一些不同的结果:
你也可以用十六进制编辑器看一下,看看它们的十六进制代码是不一样的。您会注意到字符串的前两个字符不同。
他们的前2个字母是不同的字符。
var a = 'ﺧﻮاب';
var b = 'خواب';
for ( var i = 0; i < a.length; i++ ){
console.log(a.charCodeAt(i));
}
for ( var i = 0; i < b.length; i++ ){
console.log(b.charCodeAt(i));
}
a is
[65191, 65262, 1575, 1576]
b is
[1582, 1608, 1575, 1576]
现在,如果我尝试此代码:
var a = 'ﺧﻮاب';
var b = a; // Or you can copy and paste `a` value here.
a == b; // This will return `true`
前两个字符不同,您可以在浏览器的控制台中通过 运行 a.split('') 和 b.split('') 查看差异。
每个序列的前两个字符不同:
a
: U+FEA7 U+FEEE ...b
: U+062E U+0648 ...
之所以看起来一样,是因为a
使用了b
中字符的"presentation form"个版本,用来标记字符的加入组(例如首字母) ,中间或最终)。在这种情况下,ARABIC LETTER KHAH INITIAL FORM
和 ARABIC LETTER WAW FINAL FORM
。一旦由字体渲染器(ARABIC LETTER KHAH
和 ARABIC LETTER WAW
)塑造,这些将与 b
中的字符具有相同的视觉外观。
a
中的这些表示形式字符仅存在于 Unicode 中以实现向后兼容性(Unicode 现在使用不同的机制对加入组进行编码),并且在规范上等同于 b
中的字符。 a
中的字符将在规范化形式C下被规范化为b
中的字符。