JavaScript中创建字典对象(dictionary)实例


Posted in Javascript onMarch 31, 2015

对于JavaScript来说,其自身的Array对象仅仅是个数组,无法提供通过关键字来获取保存的数据,jQuery源码中提供了一种非常好的方式来解决这个问题,先看一下源码:

function createCache() {

 var keys = [];
 function cache(key, value) {

  // Use (key + " ") to avoid collision with native prototype

  // properties (see Issue #157)

  if (keys.push(key += " ") > Expr.cacheLength) {

   // Only keep the most recent entries

   delete cache[keys.shift()];

  }

  return (cache[key] = value);

 }

 return cache;

}

上述源码是创建一个编译结果的缓存,代码调用方式如下:

var codecache = createCache();

源码中,keys用来保存键,而cache对象用来保存键值对,并通过全局变量Expr.cacheLength控制键的最大数量,若超过该数量,则自动删除第一个键及键值对。
本代码利用了闭包的结构,使外部代码无法访问到keys变量,这样就能确保keys变量的安全性。当然,由于JavaScript语句的特点,外部代码还是可以通过修改cache属性使键与键值对不匹配。不过,只要不故意恶搞,这本身应该也没有太大的关系。

当然,它也不能宣誓一个完善的dictionary对象,因为其未提供主键重复的判断等关键功能,有兴趣的朋友们可以完善它。

Javascript 相关文章推荐
幻宇的层模拟窗口效果-提供演示和下载
Jan 20 Javascript
js利用div背景,做一个竖线的效果。
Nov 22 Javascript
firefo xml 读写实现js代码
Jun 11 Javascript
jquery.ajax的url中传递中文乱码问题的解决方法
Feb 07 Javascript
js中window.open打开一个新的页面
Aug 10 Javascript
jquery代码实现多选、不同分享功能
Jul 31 Javascript
Javascript 字符串模板的简单实现
Feb 13 Javascript
angularjs实现的前端分页控件示例
Feb 10 Javascript
JavaScript实现按键精灵的原理分析
Feb 21 Javascript
js捆绑TypeScript声明文件的方法教程
Apr 13 Javascript
详解.vue文件解析的实现
Jun 11 Javascript
Vue3如何理解ref toRef和toRefs的区别
Feb 18 Vue.js
jQuery Ajax调用WCF服务详细教程
Mar 31 #Javascript
JavaScript父子窗体间的调用方法
Mar 31 #Javascript
JavaScript操作cookie类实例
Mar 31 #Javascript
javascript实现简单的贪吃蛇游戏
Mar 31 #Javascript
javascript制作2048游戏
Mar 30 #Javascript
JavaScript模拟实现继承的方法
Mar 30 #Javascript
jQuery制作可自定义大小的拼图游戏
Mar 30 #Javascript
You might like
phpmyadmin导入(import)文件限制的解决办法
2009/12/11 PHP
php HtmlReplace输入过滤安全函数
2010/07/03 PHP
php中debug_backtrace、debug_print_backtrace和匿名函数用法实例
2014/12/01 PHP
使用PHP反射机制来构造"CREATE TABLE"的sql语句
2019/03/21 PHP
jQuery Tools tab使用介绍
2012/07/14 Javascript
jquery Moblie入门—hello world的示例代码学习
2013/01/08 Javascript
javascript瀑布流式图片懒加载实例
2020/06/28 Javascript
for循环 + setTimeout 结合一些示例(前端面试题)
2017/08/30 Javascript
Angular4学习教程之HTML属性绑定的方法
2018/01/04 Javascript
如何快速解决JS或Jquery ajax异步跨域的问题
2018/01/08 jQuery
微信小程序使用二次贝塞尔曲线画波浪
2018/12/25 Javascript
JS实现li标签的删除
2019/04/12 Javascript
JS+CSS实现过渡特效
2021/01/02 Javascript
[53:52]OG vs EG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
python实现逆波兰计算表达式实例详解
2015/05/06 Python
Python中操作文件之write()方法的使用教程
2015/05/25 Python
Python实现读取并保存文件的类
2017/05/11 Python
python中如何使用正则表达式的非贪婪模式示例
2017/10/09 Python
Python3使用TCP编写一个简易的文件下载器功能
2019/05/08 Python
pandas实现to_sql将DataFrame保存到数据库中
2019/07/03 Python
Python使用type关键字创建类步骤详解
2019/07/23 Python
TensorFlow查看输入节点和输出节点名称方式
2020/01/04 Python
如何基于windows实现python定时爬虫
2020/05/01 Python
利用Python如何实时检测自身内存占用
2020/05/09 Python
Python实现计算图像RGB均值方式
2020/06/04 Python
python安装读取grib库总结(推荐)
2020/06/24 Python
python学习笔记之多进程
2020/08/06 Python
露营世界:Camping World
2017/02/02 全球购物
Farah官方网站:男士服装及配件
2019/11/01 全球购物
荷兰最大的多品牌男装连锁店:Adam Brandstore
2019/12/31 全球购物
高中生校园生活自我评价
2013/09/19 职场文书
审计工作个人的自我评价
2013/12/25 职场文书
《植物妈妈有办法》教学反思
2014/02/25 职场文书
2015年工商所工作总结
2015/05/21 职场文书
2016年中秋节慰问信
2015/12/01 职场文书
redis复制有可能碰到的问题汇总
2022/04/03 Redis