正如在这个答案的更新3中所表明的那样,这种表示法:
var hash = {};
hash[X]
Run Code Online (Sandbox Code Playgroud)
实际上并不散列对象X; 它实际上只是转换X为一个字符串(通过.toString()它是一个对象,或者是各种基本类型的一些其他内置转换),然后在" hash"中查找该字符串,而不对其进行散列.也不检查对象相等性 - 如果两个不同的对象具有相同的字符串转换,它们将仅相互覆盖.
鉴于此 - 在JavaScript中是否有任何有效的哈希映射实现?(例如,第二个Google结果javascript hashmap产生一个实现,对于任何操作都是O(n).各种其他结果忽略了具有等效字符串表示的不同对象相互覆盖的事实.
我一直在玩javascript数组,我遇到了,我觉得,有些不一致,我希望有人可以为我解释.
让我们从这开始:
var myArray = [1, 2, 3, 4, 5];
document.write("Length: " + myArray.length + "<br />");
for( var i in myArray){
document.write( "myArray[" + i + "] = " + myArray[i] + "<br />");
}
document.write(myArray.join(", ") + "<br /><br />");
Run Code Online (Sandbox Code Playgroud)
Length: 5 myArray[0] = 1 myArray[1] = 2 myArray[2] = 3 myArray[3] = 4 myArray[4] = 5 1, 2, 3, 4, 5
这段代码没有什么特别之处,但我知道javascript数组是一个对象,因此可能会向数组添加特性,这些特性添加到数组的方式似乎与我不一致.
在继续之前,让我注意如何在javascript中将字符串值转换为数字值.
非空字符串 - >字符串或NaN的数字值
空字符串 - > 0
因此,由于javascript数组是一个对象,以下是合法的:
myArray["someThing"] = "someThing";
myArray[""] = "Empty …Run Code Online (Sandbox Code Playgroud)