“关联数组”和“对象”都是键值对,有什么区别吗?
如果没什么区别的话,为什么要同时存在?
你这没说清楚是什么语言,不同语言的差异较大。对于PHP来说:
对象是类的实例化,也就是说对象肯定有它的类。
对象的成员可以是很多类型,比如对象,数组,函数等。
对象的成员可以有权限控制。
关联数组是数组。
对于js来说:
一切都是继承自Object对象,一切都是对象,且对象其实就是关联数组。
所以js的对象并非传统意义上的那种new出来的对象,因此也不具备类的一些特性比如继承重载权限等,因为它其实是个关联数组。
拿泛用的数据结构(数组、字典)表示数据是函数式的特征。一些动态语言的对象在字典的基础上实现了面向对象的特性。比如封装,字典不大可能实现可见度的控制,而创建方法也需要手动绑定。你拿scheme模拟一个oo系统就知道了。
一切皆对象,一切对象的本质都是关联数组,都可用for in 遍历。