好像记得c语言刚开始的时候就问什么是程序,给出的答案是算法加数据结构就是程序。直到今天我觉得自己没有彻底理解这句话。不过对于算法和数据结构的重要性到是深有体会,特别是数据结构。基本都是围绕它来转的。甚至从微机原理开始就开始大把大把的使用stack,fifo这些。
js提供的原始数据结构好像就是数组,数组也却是是最简单最强大的工具,但很多情况下,也需要一些key对应value。这种hash结构那里找?任何js对象都是!!底层如何实现的不大清楚,但是越看一些库类,越发现把对象当hash使用的平凡。
- //just a object
- var hash = {};
- hash["key1"] = 123;
- hash["key2"] = "456";
- alert(hash["key1"]);
- //function
- var fun = function(){
- return "";
- }
- fun["aa"] = "123";
- fun["bb"] = "456";
- alert(fun["aa"]);
只要是对象他都可以被当作hash处理,我觉得多出一种常用的原生态支持数据结构,对一门语言来说是非常有竞争力的,但很少看到有如此介绍的,难道是我理解有问题??
- //包括dom对象也是能够当作hash处理的
- var ele = document.getElementById("eleId");
- //可以随便赋值
- ele["attr1"] = "whatever attr";
- ele["key"] = 123;
- //甚至dom的一些属性都是附在这个hash对象上的key
- alert(ele["id"]); //他的id
- alert(ele["name"]); //name 属性
- alert(ele["onclick"]); //甚至连onclick属性如果赋了值 也能得到
困惑的问题来了,id居然可以通过hash表那样取,非常的方便,为啥还要通过dom来取呢?符合xml的dom规范?如果纯把dom对象看成hash很多问题都可以简化。很多库类,以jquery为例,事件的trigger,很不错,似乎就是通过类似方式来实现的。
- //包括dom对象也是能够当作hash处理的
- var ele = document.getElementById("eleId");
- alert(ele["onclick"]); //实际得到的是一个函数
- ele["onclick"] (); //执行该函数,这就实现了onclick的trigger
按照hash的思路,js对象的reflection,和方法的调用就非常容易理解
- //包括dom对象也是能够当作hash处理的
- var ele = document.getElementById("eleId");
- for(var prop in ele){
- alert(prop);//属性或者方法
- ele[prop] (); //如果是方法,明显可以这么来执行,当然如果不是方法会出错,判断一下就可以,哈哈哈哈哈
- }
总结来说就两点
1,js多了一种常用数据结构
2,reflection的强大支持