1 关于数组和对象的概念
1 数组
在计算机中,基本上任何语言的数组存储方式(加基本是因为不是所有语言我都懂啊..),都是以类型相同的数据(或者叫元素)连续地存储在地址空间里,他们在形式上也很相似,所以也可如此形容,数组是一组连续的相同类型的集合,第一个元素在数组中的下标表示为0。
比如js中的数组。在js中,可以这样初始化数组:
var num = new Array();
cars[0] = "one";
cars[1] = "two";
cars[2] = "three";
也可这样
var arr = new Array("one","two","three");
也可这样
var arr = [];
arr.push({"key1":"value1","key2":"value2"});
arr.push({"key3":"value3","key4":"value4"});
// 使用时
var value1 = arr[0].key1;
var value3 = arr[1].key3;
因为此时arr变成了js对象数组,,一对{}相当于一个数组元素,而里面有一对key/value。所以,数组的元素是基本类型,也可以是复杂类型,比如json字符串
var arr = new Array(
'{"name":"Runoob", "url":"www.runoob.com"}',
'{"name":"Google", "url":"www.google.com"}',
'{"name":"Taobao", "url":"www.taobao.com"}');
在js代码请求服务器时,因为发送的是字符串,所以要把数据变成字符串,如果是json对象,则浏览器会转换为&name=value$name2=val2的形式发送
$.ajax({
type: "POST",
dataType:"json",
url: "a url",
data: {"name1":"val1","name2":"val2"},
success: function(data){}
});
而请求返回的数据data,是object,而js里的对象,和json对象很类似,你可以这样使用data.key来取出值;
而json数组就更好看一些,因为不论有多少中括号,最里面的元素都是key/value组成的基本json格式的数据,不会有特殊的东东。
{
"id":10086,
"task":"send",
"sites":[
{"name":"Runoob", "url":"www.runoob.com"},
{"name":"Google", "url":"www.google.com"},
{"name":"Taobao", "url":"www.taobao.com"}
],
"location":[
{"name":"beijing","in":["north","east"]},
{"name":"chongqing","in":["south","west"]}
]
"}
2 对象
js里面一切皆可为对象,就像c++一切皆对象一样。只不过这个对象,多了方法和属性。当然,c++里也有方法和属性....
你可以给js对象增加方法和属性,
var name = "one name"; // js对象
var name_len = name.length; // js对象的属性
var name_cap = name.toUpperCase(); //js对象的方法
你也可像上面的内建函数一样,使用构造函数给自己的对象加上方法:
function person(name,age)
{
this.name = name;
this.age = age;
this.len = function(){
return (this.name.length + this.age.length);
}
}
p = new person("liu","122");
alert(p.len());// 6
在概念上,js对象可以是json对象,而json对象不一定是js对象。
js对象可以是任何类型和形式的数据,就像c++或者java里自定义的类实例化的对象一样,而json对象只是其中一种而已。下面给obj添加两个属性,其中type2是json对象
// 创建js对象
var obj = new Object();
// 给对象添加属性
obj.type1 = "value";
obj.type2 = {"name":"value"};
alert(obj.type1);
alert(obj.type2.name);
而json对象如上所说,是key/value形式的
var json = {"name1":"value1", "name2":"value2"};
而json字符串,就是把json对象加上引号变成字符串而已啦,此时是文本,你就不能用obj.name1来取值了。
var json_text = ‘{"name1":"value1", "name2":"value2"}’;
但是,你可以用parse()方法把json字符串转换成js对象或json对象,来obj.name1这样去取值
var json_text = ‘{"name1":"value1", "name2":"value2"}’;
var obj = JSON.parse(json_text);
alert(obj.name1);