提取对象的名称/值

时间:2016-04-26 19:58:42

标签: javascript node.js express

我是Javascript和Nodejs的新手,我正在使用express并调用链接

  ?

本地主机:7080 / V1 /电影/顺序/通知/插入滋生=惠比特&安培;年龄= 10

然后尝试提取属性名称及其对应的值:

  console.log(req.query.breed);     //1
  console.log(req.query.age);       //2
  for (var name in req.query) {     //Extracting property and its value
      console.log(name);            //property name
      console.log(req.query[name]); //3
      console.log(req.query.name);  //4 
  }

你能解释一下为什么3个工作正常,而 4给出未定义的值? 1& 2也工作正常。

3 个答案:

答案 0 :(得分:0)

通过字符串类型访问JavaScript对象。当您使用.name时,javascript会将此解释为req.query对象中“name”的键。

或者,当JavaScript使用[name]时,将使用与该变量关联的字符串值而不是变量名称本身。

一般经验法则:使用JavaScript变量查找对象值时,请始终使用括号表示法。 [name]

答案 1 :(得分:0)

#3起作用的原因是:

  for (var name in req.query) {     //Extracting property and its value

      console.log(req.query[name]); //3

  }

'名称'这是对"键"的引用。在req.query。没有钥匙"名称"所以当你说:req.query.name - 它有错误,因为查询没有键"名称",但是当你迭代它的键时... ...

for (var name in req.query)

"名称"这里只是一个参考。它持有'迭代对象时对键名的引用。

作为一个例子:

var obj = {
   age: 100,
   year: 1980,
   color: "blue"
}

for (var name in obj) {
   console.log('KEY IS: ', name)
}

但是,你注意到了#34; obj"没有钥匙"名称" ...所以,做" obj.name"会错的。

答案 2 :(得分:0)

我认为上述所有答案都是正确的,但举一个例子试图说明这一点:

var foo = [1, 2, 3, 4, 5];
console.log(foo);

for(i in foo)
console.log(i);

for(i in foo)
console.log(foo[i]);

for(i in foo)
console.log(foo.i);

这里的关键争论是在foo [i]和foo.i之间 foo [i]中的'i'在迭代器循环中具有特殊含义。并且i的值等于迭代条目。 因此,当我们遍历对象时,在每次迭代中,'i'将保留条目,因此foo [i]可以工作。

foo.i中的'p'在迭代器循环中没有特殊含义。 'i'不被视为变量,而是作为容器对象foo的已知命名属性。 foo.i中的'i'和迭代器中的i是不同的。 由于我们没有名为“i”的字段,因此会抛出错误。

希望这有帮助。