我是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也工作正常。
答案 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”的字段,因此会抛出错误。希望这有帮助。