天天看点

ECMAScript陋解(1.0)

越简单的东西,越提现本质。只有简单,才可以幻化出无穷的可能。ECMAScript作为JavaScript的语言核心,便是如此。

任何程序操纵的都是数据,而我们,则是通过变量这个中转来体现对数据的绝对控制,因为数据永远只是抽象。因此我们描述事物的时候总需要借助一个名称或者代词来指代那个事物,在ECMAScript中那就是变量的职责了。

变量所指代的东西就是数据,ECMAScript中简单来说,有两类数据形式,值和引用。值通常表示很直接的数据,而且就是数据本身;引用则绕了个弯,并不是数据的本体,而只是一些数据的引用。展开来说,值形式的直接数据有number,string,boolean,如果一个变量指代它们,那么该变量所指代的就是它们本身。引用形式只有object,它其实是值数据的一个集合体,一个团体,好像是它内部拥有一些特殊的变量,变量直接属于哪个object,所以引用也可以说是对象。

一句话,变量可以是值或者引用,引用或说对象是一些直属变量的集合。当然,这是理性情况,理想总是美好的,简洁的,但事实总会有些出入。

ECMAScript中还有一些特殊的玩意儿,undefined,null ,function。简单说undefined是一个没有值的值,null是一个不是对象的对象。也就是说undefined存在的意义就是说明某个变量它指代的应该是值,只是还没有被真正赋予,同样null指代的是一个对象或说引用,只是没有被赋予。function更特殊一点,它在ECMAScript里头是一个对象,只是它有着普通对象所不具备的一些特殊功能。function拥有一个不能直接看见的constructor,就是一段代码,一段操作,没错,它就是操作本身(严格说是操作的命令,操作本身肯定是硬件的事了),它不属于数据(或说它是特殊的数据,不是拿来被操纵的数据,虽然也可以被操纵),它就如同超自然的存在可以去操纵任何数据。而我们写下的每一行代码,也可以认为都是constructor的内容(对计算机内部的数据来说我们确实是超自然的存在啊,哈)。打个不恰当的比喻,如果变量是人,值是个人,对象是团队,而constructor里头的东西就是自然之力,简单说就是神吧,而function这个特殊的团体,就是神的代言团队(所以编写代码的人就是众神之神了)。所以constructor就扮演了催生万物和控制万物的角色。在ECMAScript中,值是没法独立存在的,必须依靠一个对象,也就是说只有团体才能催生个人,个人不能突然出现。而对象的催生要么依靠其他对象(严格来说,这不是催生),要么就只剩下万能的constructor了。所以每个对象都会有一个印记,代表了催生该对象的constructor。于是原本简单和谐的理想,出现了我们这样想要操纵世界的众神之神,变得异常复杂,但也变得充满生机,由于爆发出来的世界过于庞大,渐渐也出现了等级制度。

javascript的创世神话敬请期待。

继续阅读