iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >重载toString如何实现JS HashMap
  • 698
分享到

重载toString如何实现JS HashMap

2023-06-17 13:06:29 698人浏览 安东尼
摘要

重载toString如何实现js HashMap,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。用过Java的都知道,里面有个功能强大的数据结构——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方法就不一定了,它也许每次返回都不一样的值。所以运用的时候,要根据实际情况做相应的调整

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

--结束END--

本文标题: 重载toString如何实现JS HashMap

本文链接: https://www.lsjlt.com/news/289449.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 重载toString如何实现JS HashMap
    重载toString如何实现JS HashMap,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。用过Java的都知道,里面有个功能强大的数据结构——HashMap...
    99+
    2023-06-17
  • 如何在java利用tostring方法实现重写
    今天就跟大家聊聊有关如何在java利用tostring方法实现重写,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。当需要将一个对象输出到显示器时,通常要调用他的toString()方法...
    99+
    2023-05-31
    java tostring ava
  • 缓存调用链如何实现JS方法的重载
    小编给大家分享一下缓存调用链如何实现JS方法的重载,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.什么是方法重载方法重载是指在...
    99+
    2024-04-02
  • js模拟如何实现重载以及默认参数
    目录模拟实现重载以及默认参数下面先说实现重载的方法接下来是实现默认参数的方法下面进行一下测试js的函数支持重载吗模拟实现重载以及默认参数 众所周知,js是函数不支持重载和默认参数的,...
    99+
    2024-04-02
  • java如何模拟实现tostring函数
    这篇文章将为大家详细讲解有关java如何模拟实现tostring函数,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。模拟实现tostring函数public static String&...
    99+
    2023-06-27
  • p5.js如何实现图片加载
    这篇文章主要为大家展示了“p5.js如何实现图片加载”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“p5.js如何实现图片加载”这篇文章吧。一、preload()...
    99+
    2024-04-02
  • JS中如何实现数组去重
    这篇文章主要介绍JS中如何实现数组去重,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!操作的数组 let arr=[0,1,23,'1',4,2,8...
    99+
    2024-04-02
  • VB.NET如何实现过程重载
    这篇文章主要介绍了VB.NET如何实现过程重载,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。VB.NET过程重载是指使用相同的名称和不同的参数列表在多个版本中定义某个过程。重...
    99+
    2023-06-17
  • golang如何实现函数重载?
    go 语言不支持传统函数重载,但可以通过以下方法实现类似效果:使用命名函数:为不同参数或返回类型的函数创建唯一名称;使用泛型(go 1.18 及以上):为不同类型参数创建函数的单个版本。...
    99+
    2024-04-29
    golang 函数重载
  • Java如何实现HashMap排序
    这篇文章主要介绍了Java如何实现HashMap排序的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java如何实现HashMap排序文章都会有所收获,下面我们一起来看看吧。排序已有数据按key排序使用strea...
    99+
    2023-06-30
  • C++如何实现函数重载
    这篇文章给大家分享的是有关C++如何实现函数重载的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。函数重载函数重载还有一个别名叫函数多态,其实我个人感觉函数多态这个名字更好理解更恰当一些。函数多态是C++在C语言基础...
    99+
    2023-06-25
  • JS如何实现数组去重复值
    这篇文章主要介绍JS如何实现数组去重复值,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!运行效果图如下:完整实例代码如下:<!DOCTYPE html PUB...
    99+
    2024-04-02
  • 如何使用JS实现数组去重
    这篇文章主要介绍如何使用JS实现数组去重,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体如下:var arr = ['abc',...
    99+
    2024-04-02
  • C++如何实现操作符重载
    这篇文章主要介绍了C++如何实现操作符重载,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在C++中经常会遇到重载运算符的问题,其实运算符重载必须将运算符看做一个函数,分清他的...
    99+
    2023-06-04
  • C#操作符重载如何实现
    这篇文章主要讲解了“C#操作符重载如何实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#操作符重载如何实现”吧!C#操作符重载是什么?是指允许用户使用用户定义的类型编写表达式的能力。例如...
    99+
    2023-06-18
  • js前端如何实现图片懒加载
    这篇文章主要介绍js前端如何实现图片懒加载,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!思路:将页面里所有img属性src属性用data-xx代替,当页面滚动直至此图片出现在可视区域...
    99+
    2024-04-02
  • C++中如何实现运算符重载
    这篇文章主要为大家展示了“C++中如何实现运算符重载”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C++中如何实现运算符重载”这篇文章吧。1、引例class Complex{priva...
    99+
    2023-06-28
  • C#中如何实现运算符重载
    这期内容当中小编将会给大家带来有关C#中如何实现运算符重载,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。当一个订单与另外一个订单相加形成一个新的订单。新订单的货物为两个订单的货物的并集,总价为两个订单的总...
    99+
    2023-06-18
  • js如何实现文件流式下载文件
    在JavaScript中,可以使用Blob对象和URL.createObjectURL()方法来实现文件的流式下载。具体步骤如下:1...
    99+
    2023-08-09
    js
  • AngularJS如何使用ocLazyLoad实现js延迟加载
    这篇文章主要介绍AngularJS如何使用ocLazyLoad实现js延迟加载,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!开发一个系统遇到了一个问题,用angular路由一个htm...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作