两个相同的字符串如何彼此不相等?

时间:2012-01-18 17:53:55

标签: javascript

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

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

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

这是一个演示

JSFiddle DEMO

3 个答案:

答案 0 :(得分:16)

这是一招吗?你是否用一些特殊的unicode魔法生成了a's?我删除了a's并重新输入了它们,现在两个提醒都显示true,因为它们应该

Updated Fiddle

答案 1 :(得分:14)

每个a实际上并不是一个简单的a。如果您将光标放在其后面并按下Backspace,则删除“something”,然后返回true

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

$a='a‌';
var_dump($a);

string(4) "a‌"

看到这里有什么问题?字符串长度为4。

此外,这:

echo base64_encode($a);

...返回:

YeKAjA==

对于带有字母a的简单字符串,它应该只是YQ==

额外字符称为"ZERO WIDTH NON-JOINER"

答案 2 :(得分:6)

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

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

8204似乎是Zero-width non-joiner

的unicode值

虽然是第二个:

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

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