听到这句话,叶小凡一顿,动作停止了下来。
对象数据类型在《JavaScript基础修炼要诀》中只是提了一下,并没有细讲,它深深地勾起了叶小凡的好奇心。
“小娃娃,相见是缘,既然你感兴趣,我便教你一教。你且听好,在JavaScript中, 数据可分为两类,分别为原生数据类型和对象数据类型 。所谓对象数据类型,是一种复合型的数据类型,它可以把多个数据放到一起,就好像一个篮子,这个篮子里面的每一个数据都可以看作是一个单元,它们都有自己的名字和值。”
叶小凡被叶老的话深深地打动了,立刻聚精会神地听起来。
“现在你相信了,我可还是妖怪?”
叶小凡嘿嘿一笑,重新把戒指戴好。
“小娃娃,你叫什么?”
“叶小凡!”
“嗯,老夫姓叶,你也姓叶,确实有缘。小娃娃,我且问你,你可愿意拜我为师?”
“弟子愿意!”
说完,叶小凡将戒指摘下,放在身前的岩石之上,开始行拜师之礼。叶老虽然没有形体,但是却能看得一清二楚,待所有礼节完毕,叶老这才满意地点了点头。
“很好,小娃娃,你可听好。对象数据类型比原生数据类型强大了不少,原生数据类型,比如数值型、浮点型、布尔型等都只能存放一些直接量,也就是说单一的数据。而对象数据类型却是可以存放一大堆数据的集合,这些数据都有自己的名字,比如……”
忽然,叶小凡心头一亮,感觉有清晰的画面传来。
“我现在没有形体,但是我却可以用意念来给你做演示,小娃娃,你且看好。现在我给你创建一个对象。”
var container = {};
“创建对象就是用一个大括号吗?”
“这是创建对象的一种方式,也是最常用的方式。创建对象以后,就相当于开辟了一块内存,对象包含若干数据,每个数据都有自己的名字和值。对象好比是一个容器,现在我要在这个容器里面放一个数据,你且看好!”
“小娃娃,你可看明白了?”
“前辈,您刚才说对象数据类型里面可以放若干数据,那现在它里面是不是已经有了一个数据,数据的名字叫作caoyao,它的值是字符串类型的草药?”叶小凡两眼放光,回答道。
“嗯,小娃娃,看来你的悟性还可以。在这个例子中,caoyao叫作键,草药叫作值,它是一种键值对的形式。”叶老哈哈大笑。
“键值对,键值对,一个键对应一个值,一个键和一个值就凑成了一对,键和值中间用冒号。哦,我明白了!”叶小凡恍然大悟,随即又问道:“那么,前辈老爷爷,您刚才不是说对象数据类型里面可以放若干个数据吗?现在里面只有一个,怎么添加第二个呢?”
“嗯,小娃娃,这个问题问得很好。你且听好, 如果你想要在一个对象里面添加新的数据,则只需要添加一个逗号,然后写上新的键值对就行了 。”
“小娃娃,我现在给你演示的方式是在创建对象的时候立刻在对象里面设置键值对。其实还有其他办法,那就是在对象创建之后,在外面对这个对象的变量进行操作。你且看好,我现在用新的办法改写刚才的例子。”
“虽然我不太明白这里面的玄妙,但是我大概猜到了caoyao是container这个对象的属性,似乎就是把刚才写在“{}”里面的东西又在外面重新写了一次的意思吧。”
“嗯,孺子可教,container.caoyao中的点(.)就是对象访问属性的意思,正因为caoyao是container的属性,所以container才可以用点(.)。对象包含若干数据,每个数据都是一个键值对,这些数据也叫作对象的属性。那么键值对中的键就是属性名称,键值对中的值就是属性值。”
“我明白了,但是我还有一个疑问,如果对象用点(.)访问一个根本不存在的属性会怎样呢?”叶小凡问道。
“好问题,就比方说刚才的例子,如果我直接访问一个根本不存在的属性danyao,那么会怎样呢?小娃娃,看好!”
结果是undefined。
“我明白了, danyao这个属性不存在于container对象中,因此它是未定义的,得到的结果就是undefined !”叶小凡惊呼。