__hash__对于javascript?

rjk*_*lan 2 javascript python hash dictionary associative-array

有没有办法在js自定义哈希中给对象,就像重写一样

__hash__()
Run Code Online (Sandbox Code Playgroud)

在python中,让某人定义如何将给定对象散列到字典中.

我的基本问题是:使用什么哈希函数将js对象放入关联数组中,我可以覆盖它吗?

Ale*_*yne 7

您的意思是使用对象作为键,如何确保再次访问该键?

神奇的方法是toString().原来JS中的所有对象都使用字符串键,toString()如果它不是字符串,则调用该方法.

http://jsfiddle.net/udsdT/1/

var objA = {
    data: 'yay',
    toString: function() {
        return 'value_as_key';
    }
};

var objB = {
    data: 'some other totally data thing',
    toString: function() {
        return 'value_as_key';
    }
}


var foo = {};
foo[objA] = 'abc';
foo[objB] = 'def';
foo['value_as_key'] = 'qwe';
foo.value_as_key = 'omg';

foo[objA];           // 'omg'
foo[objB];           // 'omg'
foo['value_as_key']; // 'omg'
foo.value_as_key;    // 'omg'
Run Code Online (Sandbox Code Playgroud)

通常,你真的不想使用整个对象作为键.特别是如果你不创建自己的toString()方法,因为toString()基本对象的默认方法并不是非常棒...

({a:123}).toString() // [object Object]
({b:456}).toString() // [object Object]

var foo = {};
foo[{a:123}] = 'wtf';
foo[{asdf:9876}];       // 'wtf'
foo['[object Object]']; // 'wtf
Run Code Online (Sandbox Code Playgroud)