Javascript 使用Hashmap/Dict 和陷阱

大部分是来自于摘录的一些链接的内容

总的来说,其实比较类似
刚刚找到其实js有内置Map对象:MDN Map

Dict

下面的内容就来自该链接
js使用dict 主要是基于为object添加属性来实现的。

创建

var dict={};
// or 
var dict = new Object();

带初始值

var dict= {
  FirstName: "Chris",
  "one": 1,
  1: "some value"
};

Populate Value

// using the Indexer
dict["one"] = 1;
dict[1] = "one";

// direct property by name
// because it's a dynamic language
dict.FirstName = "Chris";

遍历

for (var key in dict){
 var value = dict[key];
}

在遍历时,我注意到,其实key的iterate顺序并不是跟插入顺序一致,这点跟某个人在stackoverflow里面回复不一致

函数也可以是key/value

var dict = {};

var f = function() {};

// setup Function as Value
dict['method'] = f;

// setup Function as Key
dict[f] = 'some value';

// execute Function from Value
dict['method']();

var method = dict.method;
method();

// get value for Key
var val = dict[f];

下面就是从别处收集的啦~~~

返回所有key

返回结果为数组

var keys = Object.keys(dict);

……好像就木有其他的了哈哈哈,有了再补充吧

JavaScript Objects as Associative Arrays

参加内容超丰富的链接
借用来当dict,用法如下

var myArray = new Array(); 
myArray["abc"] = 200; 
myArray["xyz"] = 300; 

Magic & mystery

var myArray = new Array(); 
myArray["a"] = 100; 
myArray["c"] = 200; 
// the alert box will contain nothing, 
// it'll be empty!! 
alert(myArray);

alert(myArray.length); // output: 0

解释:其实是因为key a 和c 是array的属性。

Array.prototype 陷阱

另外一个我遇到的陷阱:

// add a function to Array Object
    Array.prototype.Exists = function(v) {
       //do sth..
   };
// iterate some array

var arr = [1,3];
for( var index in arr)
{
    var value = arr[index];
    alert(index +": "+value);
}

其实会有很奇怪的输出哦!
当index =0,1 时 输出正常,之后会发现其实循环还没停止。
alert 输出

Exists: function (v) {
//do sth..
console.log(“xxx”);
}

因为iterating 其实是在枚举。 不过具体机制我也不是很清楚啦。。需要继续研究ing
大家的讨论 : JavaScript: What dangers are in extending Array.prototype?
一个鲜为人知的事实:Array.prototype 本身也是个数组。

Array.isArray(Array.prototype); // true
Array.prototype.length // =0

参见MDN 链接

some discussion: Extending builtin natives. Evil or not?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值