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

qwe*_*ymk 10 javascript

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

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

alert('a?' == 'a');
alert('a?' === 'a');
Run Code Online (Sandbox Code Playgroud)

这是一个演示

JSFiddle DEMO

Ada*_*kis 16

这是一招吗?你有没有a's用一些特殊的unicode魔法生成那些?我删除a's并重新输入他们,现在这两个警报显示true,他们应该

更新小提琴


cam*_*aca 14

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

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

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

string(4) "a?"
Run Code Online (Sandbox Code Playgroud)

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

此外,这:

echo base64_encode($a);
Run Code Online (Sandbox Code Playgroud)

..returns:

YeKAjA==
Run Code Online (Sandbox Code Playgroud)

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

额外的角色被称为"ZERO WIDTH NON-JOINER".


Li0*_*liQ 6

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

'a?'.charCodeAt(0)
97
'a?'.charCodeAt(1)
8204
Run Code Online (Sandbox Code Playgroud)

8204似乎是零宽度非连接器的unicode值

虽然第二个:

'a'.charCodeAt(0)
97
'a'.charCodeAt(1)
NaN
Run Code Online (Sandbox Code Playgroud)

不同的字符串是不同的自然:).