我今天在Javascript中玩数组并注意到这个小宝石:
alert([1, 2, 3] == [1, 2, 3]); //alerts false
Run Code Online (Sandbox Code Playgroud)
令我感到奇怪的是阵列不等于它自己.
但后来我注意到了这一点,甚至更奇怪了:
alert([1, 2, 3] == "1,2,3"); //alerts true
Run Code Online (Sandbox Code Playgroud)
?!?!?!?!?
世界上为什么[1, 2, 3]不是==自己而是==弦乐?
我认识到,==是不一样的===.即便如此,邪恶可能会导致Javascript先生做出如此奇怪的事情?
riw*_*alk 18
好的,首先你需要了解javascript如何处理程序中的值.您创建的所有变量仅仅是对存储该对象的内存中的位置的引用.因此,当你这样做:
alert( [1,2,3] == [1,2,3] );
Run Code Online (Sandbox Code Playgroud)
......它做了三件事:
您可以通过运行以下代码来检查一些理智的行为:
var a = [1,2,3];
var b = a;
alert (a == b) // Result is true. Both point to the same object.
Run Code Online (Sandbox Code Playgroud)
现在关于字符串的问题
当你使用==运算符尝试将两个操作数转换为相同的类型(邪恶的行为......我知道......)
当它执行此操作时,它决定在进行比较之前将两者都转换为字符串(因此结果确实是"1,2,3" === "1,2,3",其结果为true.
我不能给你一个完整的图片,因为很少有人了解JavaScript的疯狂的每一个细微差别,但希望这清除了一些迷雾.
==操作员[..] 如果任一操作数是字符串,则如果可能,另一个操作数将转换为字符串。[..] 如果两个操作数都是对象,那么当操作数引用内存中的同一对象时,JavaScript 会比较相等的内部引用。
https://developer.mozilla.org/en/JavaScript/Reference/Operators/Comparison_Operators
也就是说,[1, 2, 3]转换为字符串equals "1,2,3"。但是,一个数组对象不等于另一个数组对象。
| 归档时间: |
|
| 查看次数: |
3217 次 |
| 最近记录: |