JavaScript的一个Hash类

有时候我们需要使用JavaScript操作地址栏的参数,例如在一些Ajax应用中需要将地址栏“#”后的部分当作页面定位信息存储或操作,这时常需要将类似于
“a=123&b=456&c=789”
这样的字符串转化为
{a:123,
b:456,
c:789}
这样的类,如果能定义一个比较通用的Hash类在这样的工作中一定能起到事倍功半的效果,下面是一个我常用的这样的类。

function  Hash(s)  {
    
//将输入的字符串转化为hash对象的类
    this.length = 0;
    
this.item = {};
    
    
if (typeof(s) == "string"{
        
var a = s.split("&"), i, l = a.length, b;
        
for (i = 0; i < l; i ++{
            b 
= a[i].partition("=");
            
if (b[0].length != 0)
                
this.item[b[0]] = b[2];
        }

    }

}


Hash.prototype.has 
=   function  (k)  {
    
//判断Hash对象中是否存在指定键
    return (k in this.item);
}
;

Hash.prototype.set 
=   function  (k, v)  {
    
if (!this.item[k])
        
this.length ++;
    
this.item[k] = v;
}
;

Hash.prototype.get 
=   function  (k)  {
    
return this.item[k] ? this.item[k] : null;
}
;

Hash.prototype.del 
=   function  (k)  {
    
if (this.has(k))
        
this.length --;
    
delete this.item[k];
}
;

Hash.prototype.toString 
=   function  ()  {
    
var s = "", k;
    
for (k in this.item)
        s 
+= "&" + k + "=" + (this.item[k] ? this.item[k].toString() : "");
    
    
return s.indexOf("&"== 0 ? s.substring(1) : s;
}
;



使用方法比较简单,例如:

var  myHash  =   new  Hash( " a=123&b=456&c=789 " );


之后就可以对myHash进行操作,最后可以使用myHash.toString()方法将myHash还原为"a=123&b=456&c=789"形式的字符串。



其中用到一个对String对象扩展的方法,如下:
  1. String.prototype.partition = function (c) {
  2.     var p = this.indexOf(c);
  3.     return p != -1 ?
  4.     [this.substring(0, p), c, this.substr(p + c.length)] :
  5.     [this, c, ""];
  6. };

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值