大部分是来自于摘录的一些链接的内容
总的来说,其实比较类似
刚刚找到其实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?