如下代码,想把此object的data部分遍历赋予给 input标签,可是当用json.data.key时取值都为undefined。用json.data.[key]则显示正常。不知道是为什么。这两者有什么区别
var json = {
statusCode:1,
data: {
userName:"Wilson",
userCode:"U201313759",
password:"88888888",
academy:"电信学院",
major:"通信工程",
grade:"2013",
class:"5班",
email:"wilsonliuxyz@gmail.com", },
};
for (var key in json.data) {
if (json.data.hasOwnProperty(key)) {
// 如果吧json.data[key],则输出全部为undefined
document.getElementsByClassName(key)[0].value = json.data[key];
console.log(json.data);
}
}
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
访问json的时候,
obj["key"]
与obj.key都是可以的,不过,如果key值并不确定,而是一个变量的时候,则只能通过obj[someKey]
的方式访问。我来告诉你答案吧
是对象访问方式;
所以json.data.key访问的是json对象下的data对象下的key;
那么json.data[key]访问的是json对象下的data数组的下标为key的值(对象是可以以数组形式来访问的),
因为这个key是变量,假设key为1,那么则
如果是:
好了,来对比以下代码:
再仔细解释我不知道怎么解释,只可意会不可言传,你自己想一下。
区别还有:
以上情形,只有通过[]语法才能获取'first name',因为其中有空格,用.语法怎么也取不到。。。
做了一个简单的实验。
意思就是
obj.key
一般可以看作是obj["key"]
,其他情况下不能乱来。json.data.key
这里的key
必须是引用值json.data[key]
这里的key
必须是字面量前面几位说的很好了,我补充一个:
当你的属性名包含了空格时,必须采用中括号的写法。
data.key
代表 data里面name = "key"
的valuedata[key]
代表data里面name = key
的valuefor(var i in data){
}
可以理解为:
obeject.key 是json对象的方式获取数据;
object[key] 是json数组的方式获取数据;
具体区别和使用场景举个栗子你就知道了
此时问题来了,知道key的情况下
但是,
当你不知道key的情况下,想获取数据,就只能[]数组形式
。这个场景还挺多,例如:你要展示,别人发送给你的一组key-value,你不可能知道所有的key,即使知道了,也不会去这么写,
这也就是[]存在的价值
,此时只能采用数组形式获取。效率方便,没有深入研究,没有发言权。
区别就是,标准的json中,key是字符串,需要用双引号"key"括住,然而js中的对象的属性,必须满足js的标识符命名规范,以$_A-Za-z开头。但是标准json中,可以用双引号阔住,不受js语法的影响,甚至可以使用特殊字符。
比如{"1":2},这是合法的。但是如果你用.号语法来定义一个属性,这是做不到的。如obj.1=2;这是语法错误。这时候,如果你要获取key为1或者"1"的值,只能用obj[1]或者obj["1"],而不能用obj.1。