您好,欢迎来到北风网!

obeject.key与object[key]有什么区别

加关注
14 1400
小凤爷 小凤爷 2016-01-13 23:41:27 JavaScript

如下代码,想把此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);
    }
      }
请先登录注册
wgh932739
已采纳
wgh932739 的回复

访问json的时候,obj["key"]与obj.key都是可以的,不过,如果key值并不确定,而是一个变量的时候,则只能通过obj[someKey]的方式访问。

var obj = {
    name: 'tom', age: 22
},
someKey = 'name';

obj.name   // 可以访问,返回 'tom'
obj['name']  // 可以访问,返回 'tom'
obj.someKey // 出错
obj[someKey] // 可以访问,返回 'tom'

2016-02-17 16:24:09 回复 0
请先登录注册
ji508
ji508 的回复

前面几位说的很好了,我补充一个:
当你的属性名包含了空格时,必须采用中括号的写法。

2016-01-19 03:42:18 回复 0
请先登录注册
yang2119
yang2119 的回复

  • 动态取字段

  • 特殊字符

2016-01-20 03:42:18 回复 0
请先登录注册
ynwsldh
ynwsldh 的回复

http://es6.ruanyifeng.com/#docs/class 阅读ES6的Class规范会有答案的。

2016-01-21 03:42:18 回复 0
请先登录注册
阿九1977
阿九1977 的回复

obeject.key 是对象形式访问变量
对象声明:

var obeject = {
    key: 'hello world!',
    key1: 'asdfg'
}
console.log(typeof obeject);
console.log(obeject.key);

object[key] 是数组形式访问变量
数组声明:

var obeject = [
    'hello world!', 'asdfg'
];
console.log(typeof obeject);
console.log(obeject[0]);

2016-01-21 03:57:27 回复 0
请先登录注册
plcat99
plcat99 的回复

object.key里面的key为标识符,应符合标识符(比如变量)的命名规范。
object[key]里面的key为表达式,可以是字符串或复合表达式,比如object['your name']object['your' + ' name']object[dict.nameKey]

2016-01-21 03:58:01 回复 0
请先登录注册
asynoo
asynoo 的回复

  • json.data.key 这里的key必须是引用值

  • json.data[key] 这里的key必须是字面量

2016-02-17 16:13:10 回复 0
请先登录注册
chaneed
chaneed 的回复

我来告诉你答案吧

json.data.key

是对象访问方式;
所以json.data.key访问的是json对象下的data对象下的key;
那么json.data[key]访问的是json对象下的data数组的下标为key的值(对象是可以以数组形式来访问的),
因为这个key是变量,假设key为1,那么则

json.data[1]; //访问的是json.data下的第二个数据

如果是:

json.data['key']则访问的是json对象下的data数据中一key来下标的数据,比如
var json = {
    data : {
        key : 'value';
    }
}
// 那么:
json.data['key']得到的是value

好了,来对比以下代码:

var json =  {
    statusCode:1,
    data: {
     userName:"Wilson",
     userCode:"U201313759",
     password:"88888888",
     academy:"电信学院",
     major:"通信工程",
     grade:"2013",
     class:"5班",
     key : "这里是我定义的key值", // 为了有个好的示例,我定义了一个key
     email:"wilsonliuxyz@gmail.com",
         },  
     }; 
// 1.获取key值
var a = json.data.key; 
console.log(a); // 这里输出的a为:这里是我定义的key值
// 2.数组方式:
var key = 0;
var b = json.data[key]; 
console.log(b); // 这里输出b为:Wilson 
// 也就是说这里输出的是userName的值
// 3.继续数组方式获取
var c = json.data['key'];
console.log(c); // 这里输出c为:这里是我定义的key值

再仔细解释我不知道怎么解释,只可意会不可言传,你自己想一下。

2016-02-17 16:16:58 回复 0
请先登录注册
ilmhuang
ilmhuang 的回复

  • data.key 代表 data里面name = "key"的value

  • data[key] 代表data里面name = key 的value

2016-02-17 16:19:41 回复 0
请先登录注册
shanmaobhb
shanmaobhb 的回复

区别还有:

var obj = {}; 
obj['first name'] = 'mike';

以上情形,只有通过[]语法才能获取'first name',因为其中有空格,用.语法怎么也取不到。。。

2016-02-17 16:20:41 回复 0
请先登录注册