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