两个相同的字符串怎么会不相等呢

How do two identical strings not equal each other?

本文关键字:字符串 怎么会 不相等 两个      更新时间:2023-09-26

有人给我发了一封电子邮件:

为什么这两个警报都是假的?

alert('a‌' == 'a');
alert('a‌' === 'a');

这是的演示

JSFiddle演示

每个的第一个a实际上不是一个简单的a。如果您将光标放在它的正后方并按Backspace,则删除"something",然后它返回true

我复制了你的a字符串,这是我运行此代码时得到的:

$a='a‌';
var_dump($a);
string(4) "a‌"

看看这里怎么了?字符串长度为4。

此外,这个:

echo base64_encode($a);

退货:

YeKAjA==

当,对于字母为a的简单字符串,它应该仅为YQ==

额外的字符被称为"零宽度非JOINER"。

这是个把戏吗?你用一些特殊的unicode魔法生成了那些a's吗?我删除了a's并重新键入它们,现在两个警报都显示true,因为它们应该是

更新的Fiddle

对于第一个"a"控制台说:

'a‌'.charCodeAt(0)
97
'a‌'.charCodeAt(1)
8204

8204似乎是Zero-width非joiner 的unicode值

而第二次:

'a'.charCodeAt(0)
97
'a'.charCodeAt(1)
NaN

不同的字符串是不同的,这是很自然的:)。