之前一直是写C/S的,最近转做B/S了,记录一下自己在工作和学习中的JS小技巧,方便自己今后复习和查阅。
JS中默认只带array,有时候会需要key-value的map类功能,虽然array也支持array[key] = value的用法,但是看起来不爽,在网上找了一个map的实现,先记录下来,以后慢慢完善:
map的实现
function Map() { /** Map 大小 * */ var size = 0; /** 对象 * */ var entry = new Object(); /** 存 * */ this.put = function(key, value) { if (!this.containsKey(key)) { size++; } entry[key] = value; } /** 取 * */ this.get = function(key) { if (this.containsKey(key)) { return entry[key]; } else { return null; } } /** 删除 * */ this.remove = function(key) { if (delete entry[key]) { size--; } } /** 删除所有 * */ this.removeAll = function() { for ( var key in entry) { this.remove(key); } } /** 是否包含 Key * */ this.containsKey = function(key) { return (key in entry); } /** 是否包含 Value * */ this.containsValue = function(value) { for ( var prop in entry) { if (entry[prop] == value) { return true; } } return false; } /** 所有 Value * */ this.values = function() { var values = new Array(size); for ( var prop in entry) { values.push(entry[prop]); } return values; } /** 所有 Key * */ this.keys = function() { var keys = new Array(size); for ( var prop in entry) { keys.push(prop); } return keys; } /** Map Size * */ this.size = function() { return size; } }
另外,对于window.onLoad的实现,发现有一个小技巧需要注意,如果引用了第三方JS包,自己的window.onload可能会将其盖掉,所以最好像以下这样实现
var oldOnload = window.onload || function () {}; window.onload = function () { oldOnload(); goSelectedYear(); }
第一行的写法是为了防止之前没有window.onload定义,后续调用时为undefined报JS错 。
刚发布完文章,就在网上看到一个十分简洁的map的写法,记录一下
var hashMap = { Set : function(key,value){this[key] = value}, Get : function(key){return this[key]}, Contains : function(key){return this.Get(key) == null?false:true}, Remove : function(key){delete this[key]} }