JavaScript - 为什么我可以在数组中设置键?

时间:2016-05-16 16:22:27

标签: javascript arrays associative-array

我认为我非常了解JavaScript,直到我遇到其他开发人员的代码,这让我失望:

Object

正如您所知,它应该被用作关联数组(即Array),但它是data['somekey'] = 'somevalue'; 。然后他将值分配给该数组的键:

try{
            JSONObject jsonObject = new JSONObject(jsonData);
            boolean staus = jsonObject.getBoolean("Status");
            String message = jsonObject.getString("Message");
            JSONArray jsonPositionList = jsonObject.getJSONArray("PositionList");
            // parse json array
            for(int i = 0; i<jsonPositionList.length();i++){
                JSONObject object = (JSONObject) jsonPositionList.get(i);
                //parse object here
            }
            JSONObject loginUserInfo = jsonObject.getJSONObject("LoginUserInfo");
            //parse loginuserinfo here
            JSONObject loginDriverInfo = jsonObject.getJSONObject("LoginDriverInfo");
            //parse logindriverinfo
        }catch(JSONException e){
            e.printStackTrace();
        }

我认为这在JavaScript中是不可能的,我认为它会引发异常,但它有效。它为什么有效?如果我们可以使用Arrays,为什么我们需要Objects呢?它被认为是一种不好的做法,我应该羞辱那个开发者吗?

6 个答案:

答案 0 :(得分:5)

它的工作原理是因为Arrays只是Objects的特例。事实上,看看这个:

typeof []; // "object"

Arrays为开发人员提供了其他方法,如push,pop等,并允许内部引擎根据它们的使用方式更好地优化它们。

一般来说,将常规对象用于关联数组会更好,因为它基本上就是对象。没有真正的理由将数组用作&#34;关联数组&#34;在这种情况下。同样,JS引擎通常会将对象优化为类似hashmap的结构,如果您尝试以相同的方式使用普通数组,可能会也可能不会发生。

答案 1 :(得分:0)

javascript中的几乎所有对象都是以某种方式从哈希对象派生的。通过这个散列,对象就像数组一样,存储它们自己的内部属性,并允许它们被扩展和覆盖。

例如,以下所有内容都评估为“对象”:

typeof(null)
typeof([])
typeof({})
typeof(function(){}.prototype)
typeof(new function(){})

答案 2 :(得分:0)

在内部,JavaScript只有对象(和原始类型)。对象是key:value对的无序集合,其中key是string,value可以是任何JavaScript类型。

数组虽然在外部看起来像任何其他语言的普通数组,但实际上是对象的特例,具有本机支持的语言语法。

>typeof []
 "object" 

>Object.prototype.toString.call([]) 
"[object Array]"

答案 3 :(得分:0)

数组是具有一些附加功能的对象,专门用于以类似列表的方式使用数字键。所以是的,您也可以像普通对象一样为它们分配属性。这些能力得以保留。

至于为什么你需要对象呢......因为没有对象就不会成为 javascript。 JS中的大多数东西都是对象。这正是你通过注意到你可以像对象一样对待阵列来解决的问题。 当你发现它们是JS中大多数事物的基础时,不需要对象,这是有点倒退的结论!

答案 4 :(得分:0)

JavaScript 中,一切都只是键值对,看一下@ this - 我把一个快速示例放在一起然后点击 Run 按钮朝右上角。

答案 5 :(得分:-1)

众所周知,JS中的所有内容都是关键的对象:价值对。 数组也是内部对象。

var arr = ["this","is","array"];

在JS中定义它时,在内部它将被定义为具有键作为索引的对象。

arr = {0 : "this", 1 : "is", 2 : "array"}.

此外,Array是一个包装在Object类上的类,它还有其他方法来访问这些值。

希望这会对你有所帮助。