我认为我非常了解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呢?它被认为是一种不好的做法,我应该羞辱那个开发者吗?
答案 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类上的类,它还有其他方法来访问这些值。
希望这会对你有所帮助。