为什么Javascript哈希使用一个对象作为键会覆盖另一个对象键?
Why does Javascript hash using an Object as key overwrites another Object key?
function Obj() {}
var a = new Obj();
var b = new Obj();
var hash = {};
hash[a] = 1;
hash[b] = 2;
console.log(hash[a]); // 2
console.log(hash[b]); // 2
console.log(a == b); // false
我认为哈希会使用a和b的指针地址作为键,这不是真的吗?
明白了。JS散列使用toString()作为键。例如:
function Obj() {
var str = "" + Math.random();
this.toString = function() {
return str;
}
}
var a = new Obj();
var b = new Obj();
var hash = {};
hash[a] = 1;
hash[b] = 2;
console.log(hash[a]); // 1
console.log(hash[b]); // 2
console.log(a == b); // false
您混用了对象类和数组键。
function Obj() {} //create Obj object
var a = new Obj(); //a is instance Obj object
var b = new Obj(); //b is instance Obj object
var hash = {}; //create hash object
hash[a] = 1; //its not create key array in hash object - hash{[{a}]:1}
hash[b] = 2; // hash{[{b}]:2}
//hash = {[Object Object]:2}
console.log(hash[a]); //its return last assign value - 2
console.log(hash[b]); //2
指定对象key无效
简单的事情是
function Obj() {}
var a = new Obj();
var b = new Obj();
a={"name":"David"};
b={"name":"Naest"};
var hash = {};
hash[0] = a;
console.log(hash[0].name); //David
hash[1] = b;
console.log(hash[1].name); //Naest
如果你想将对象key覆盖为另一个对象key
function Hash(){
var hash = new Object();
this.put = function(key, value){
if(typeof key === "string"){
hash[key] = value;
}
else{
if(key._hashtableUniqueId == undefined){
key._hashtableUniqueId = UniqueId.prototype.genarateId();
}
hash[key._hashtableUniqueId] = value;
}
};
this.get = function(key){
if(typeof key === "string"){
return hash[key];
}
if(key._hashtableUniqueId == undefined){
return undefined;
}
return hash[key._hashtableUniqueId];
};
}
function UniqueId(){
}
UniqueId.prototype._id = 0;
UniqueId.prototype.genarateId = function(){
return (++UniqueId.prototype._id).toString();
};
使用 function Obj() {}
var a = new Obj();
var b = new Obj();
var hash = new Hash();
hash.put(a,1);
hash.put(b,2);
console.log(hash.get(a)); //1
相关文章:
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 对一个对象使用reduce可以返回一个没有't在数组中包含目标字母
- AngularJS&JSON-从Previous&下一个对象
- jQuery$.inArray()总是返回-1和一个对象数组
- javascript处理一个对象数组以获得一个新的对象数组
- javascript函数,它接受两个输入:一个对象和一个键,并返回对象中该键的相应值
- 你能用来自数组的属性名称生成一个对象吗
- 预期响应包含一个对象,但在angular js中得到一个数组错误
- Protractor:element.getText()返回一个对象,而不是String
- javascript函数将数据添加到屏幕,但随后被另一个函数覆盖
- 如何使用jQuery添加另一个对象的高度作为边距
- 计算从一个对象到另一个对象的路径并沿其移动
- 如何将一个对象添加到每个对象数组中
- 为了避免创建全局变量,可以将所有变量分配给一个对象吗
- 将一个iframe覆盖在另一个ifame上
- 将一个对象合并到另一个对象的最佳方式(无覆盖)
- Javascript:用另一个对象中的字段只覆盖一个对象的现有字段
- 比较两个对象以覆盖其中一个对象的值
- 为什么Javascript哈希使用一个对象作为键会覆盖另一个对象键?