千家信息网

重载toString如何实现JS HashMap

发表于:2025-11-12 作者:千家信息网编辑
千家信息网最后更新 2025年11月12日,重载toString如何实现JS HashMap,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。用过Java的都知道,里面
千家信息网最后更新 2025年11月12日重载toString如何实现JS HashMap

重载toString如何实现JS HashMap,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

用过Java的都知道,里面有个功能强大的数据结构--HashMap,它能提供键与值的对应访问。不过熟悉JS的朋友也会说,JS里面到处都是hashmap,因为每个对象都提供了map[key]的访问形式。

不过请仔细对比一下,你会发现其中差别还是很大的。Java HashMap的key是Object类型,所以可以任何类型的参数,而JS的key只能是字符串或是数字。 你也许会说,obj={};map[obj]=1;这段代码传入了既不是数字也不是字符的key,但也没发生错误啊。那是因为解释器将obj对象通过内置的toString方法转换成"[object Object]"这段字符了,你可以用for each下map看看。而java之所以能够接受任何类型的key,是因为其Object实现了HashCode方法,而每个类都继承或重写了 Object的HashCode,所以任何变量都有一个哈希值。我们也可以用JS来尝试一下。

前面提到了toString方法,用于任何类型转成字符;和它类似的还有另一个方法:valueOf,用于转型成数字。因为数字比较容易索引,我们先尝试valueOf:

Object.prototype.valueOf = function ()    {         alert( "Hello~" )    };    var map = [];     var obj = {};     map[obj] = 1;

结果很失望,对话框并没有跳出来,说明JS引擎没有尝试将obj对象转成数字。下面再尝试修改成toString方法:

view source print ?

Object.prototype.toString = function ()    {         alert( "Hello~" )    };    var map = {};     var obj = {};     map[obj] = 1;

这时对话框跳出来了。当然我们没有返回数据,这个1就被保存在了map["undefined"]里面。但若我们返回一个数值,并且能保证每个变量***的数值,那么就可以用最原始的map[key]的方式索引任何类型了。我们重载Object的toString方法:

var HASH_ID = 0;    Object.prototype.toString = function ()    {         if ( this ._HASH == null )              this ._HASH = HASH_ID++;          return "Obj:" + this ._HASH;    };

下面来测试一下:

view source print ?

var HashMap = {};     var obj1 = {};     var obj2 = {};     HashMap[obj1] = "Foo1" ;     HashMap[obj2] = "Foo2" ;     alert(HashMap[obj1] + " & " + HashMap[obj2]);     HashMap[obj1] = "Bar1" ;     HashMap[obj2] = "Bar2" ;     alert(HashMap[obj1] + " & " + HashMap[obj2]);

分别输出:Foo1 & Foo2 和 Bar1 & Bar2,这说明了obj1,obj2始终对应着同个索引。

当然,如果object自身重写了toString方法就不一定了,它也许每次返回都不一样的值。所以运用的时候,要根据实际情况做相应的调整

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

方法 数字 类型 字符 尝试 对象 索引 变量 对话框 数值 数据 对话 帮助 原始 强大 很大 清楚 失望 之所以 代码 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 jf服务器能兼容大华摄像机吗 数据库基础 视频 刺客信条连接服务器停止工作 长宁区品牌软件开发品质保障 安庆电信网络服务器怎样 数据库法律层面的认知 王恩东谈服务器 宝山区正规软件开发订做价格 申论对网络安全共同体的理解 默纳克服务器子码查看 数据库基础知识考试 郎溪进口软件开发服务参考价格 计算机网络技术学生努力的方向 数据库怎样制作报表 联想服务器的机箱上的惊叹号 简单的网络安全技术有哪些 淄博办公系统oa软件开发公司 赶海视频软件开发 云服务器流量监控哪个好 基于c 软件开发过程 传统网络安全和当代网络安全区别 联想服务器内存条用不了 新乡市网络安全宣传 服务器前面的防火墙 北京春笛网络技术有限公司 根据数据库生成配送单 小七手游链接服务器失败 db2数据库连接工具 上海网络软件开发销售价格 幻塔服务器维护中什么时候才能好
0