Pra*_*nab 0 javascript arrays object
在js中,伪造的值为0,null,undefined,false,NaN和”,其他一切都是真实的。因此,这意味着[]和{}也是真实值,但是当比较[]=={}or []==[]或{}=={}返回false时,为什么呢?
如果两件事是“真实的”,则并不意味着它们是“相等的”或“相同的”。
例如,5和6是“真实的”,但是您发现这一点不会感到惊讶(5 == 6) === false,是吗?
[]JavaScript中的表达式表示“创建新数组”。如果您连续执行两次,那将意味着“创建一个数组,然后创建另一个数组”。如果然后比较这两个数组,为什么还要期望它们相同?
同样,该表达式的{}意思是“创建一个新对象”,因此,如果您两次执行此操作,则这是两个不同的对象。
更深层的答案是:JavaScript比较是“浅”的。这意味着它不会“比较”值以比较其内部,而仅比较表面上的值。
对于原始类型(例如数字或字符串),“在表面”进行比较意味着“按值比较”。但是对于更复杂的值(例如数组或对象),“在表面”进行比较意味着“通过引用进行比较”。这就是为什么两个不同的对象(尽管看上去完全相同)在比较运算符==和之间不是“相等”的原因===。
某些语言(例如C#或Haskell)允许(有时自动)定义“平等”的自定义含义。默认情况下,所有类型的其他语言(例如F#或Ocaml)甚至都提供所谓的“结构相等”(即,将所有内脏进行比较)。JavaScript不是这样的语言之一。
| 归档时间: |
|
| 查看次数: |
70 次 |
| 最近记录: |