提取对象的名称/值

Extracting name/value of an object

本文关键字:取对象 提取      更新时间:2023-09-26

我是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 也工作正常。

JavaScript 对象通过字符串类型访问。当你使用.name时,javascript 将其解释为 req.query 对象中的 "name" 键。

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

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

#

3 起作用的原因是因为:

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

这里的"name"是对req.query中"key"的引用。没有键"名称",所以当你说:req.query.name - 它出错,因为查询没有键"名称",但是当你迭代它的键时,ala...

for (var name in req.query)

这里的"名称"只是一个参考。当您迭代对象时,它会"保存"对键名称的引用。

例如,这样做:

var obj = {
   age: 100,
   year: 1980,
   color: "blue"
}
for (var name in obj) {
   console.log('KEY IS: ', name)
}

但是,您是否注意到"OBJ"没有键"名称"...因此,执行"obj.name"会出错。

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

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 中的"i"在迭代器循环中没有特殊含义。"i"不被视为变量,而是被视为容器对象FOO的已知命名属性。foo.i 中的"i"和迭代器中的 i 是不同的。由于我们没有名为"i"的字段,因此会抛出错误。

希望这有帮助。