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 相关文章推荐
jQuery Deferred和Promise创建响应式应用程序详细介绍
Mar 05 Javascript
一个简单的JS鼠标悬停特效具体方法
Jun 17 Javascript
node.js中使用socket.io制作命名空间
Dec 15 Javascript
jQuery获取页面及个元素高度、宽度的总结——超实用
Jul 28 Javascript
jQuery中show与hide方法用法示例
Sep 16 Javascript
javascript实现获取指定精度的上传文件的大小简单实例
Oct 25 Javascript
jQuery实现鼠标悬停3d菜单展开动画效果
Jan 19 Javascript
vue实现动态数据绑定
Apr 28 Javascript
Mui使用jquery并且使用点击跳转新窗口的实例
Aug 19 jQuery
用WebStorm进行Angularjs 2开发(环境篇:Windows 10,Angular-cli方式)
Dec 05 Javascript
原生js实现密码强度验证功能
Mar 18 Javascript
javascript实现倒计时关闭广告
Feb 09 Javascript
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
解析:使用php mongodb扩展时 需要注意的事项
2013/06/18 PHP
带你了解PHP7 性能翻倍的关键
2015/11/19 PHP
PHP使用mkdir创建多级目录的方法
2015/12/22 PHP
Yii中Model(模型)的创建及使用方法
2015/12/28 PHP
Zend Framework教程之模型Model用法简单实例
2016/03/04 PHP
php版微信自动登录并获取昵称的方法
2016/09/23 PHP
微信小程序发送订阅消息的方法(php 为例)
2019/10/30 PHP
javascript中的有名函数和无名函数
2007/10/17 Javascript
jQuery EasyUI API 中文文档 可调整尺寸
2011/09/29 Javascript
JS正则中的RegExp对象对象
2012/11/07 Javascript
ExtJs默认的字体大小改变的几种方法(自己整理)
2013/04/18 Javascript
javascript数组常用方法汇总
2016/09/10 Javascript
浅谈Vue数据绑定的原理
2018/01/08 Javascript
浅谈Webpack 是如何加载模块的
2018/05/24 Javascript
mpvue将vue项目转换为小程序
2018/09/30 Javascript
vue设计一个倒计时秒杀的组件详解
2019/04/06 Javascript
微信小程序后端无法保持session的原因及解决办法问题
2020/03/20 Javascript
Python3.4编程实现简单抓取爬虫功能示例
2017/09/14 Python
git进行版本控制心得详谈
2017/12/10 Python
Python将list中的string批量转化成int/float的方法
2018/06/26 Python
记一次python 内存泄漏问题及解决过程
2018/11/29 Python
Python3.7 读取 mp3 音频文件生成波形图效果
2019/11/05 Python
在Matplotlib图中插入LaTex公式实例
2020/04/17 Python
Python爬虫防封ip的一些技巧
2020/08/06 Python
Python实现给PDF添加水印的方法
2021/01/25 Python
使用html2canvas实现将html内容写入到canvas中生成图片
2020/01/03 HTML / CSS
美国知名的百货清仓店:Neiman Marcus Last Call
2016/08/03 全球购物
Java里面StringBuilder和StringBuffer有什么区别
2016/06/06 面试题
网络事业创业计划书范文
2014/01/09 职场文书
期末学生评语大全
2014/04/24 职场文书
公务员政审单位鉴定材料
2014/05/16 职场文书
中文专业毕业生自荐信
2014/05/24 职场文书
委托公证书样本
2015/01/23 职场文书
侵犯商业秘密的律师函
2015/05/27 职场文书
党员转正介绍人意见
2015/06/03 职场文书
CSS 一行代码实现头像与国旗的融合
2021/10/24 HTML / CSS