关于节点和表达的一本书的例子:
var tours = [
{id:0, name: 'test', price: 0.0},
{id:1, name: 'test2', price: 0.2}
];
app.put('/api/tour/:id', function(req, res){
var p = tours.some(function(p){return p.id == req.params.id });
if (p) {
if (req.query.name) p.name = req.query.name;
if (req.query.price) p.price = req.query.price;
res.json({success:true;});
} else {
res.json({error: 'No such tour exists.'});
}
});
让我们说p返回true,我是否正确地假设尝试为p分配属性是不会起作用?
答案 0 :(得分:1)
Array.prototype.some()
method返回一个布尔值。这是原始值,而不是“文字”。
如果p
包含布尔值,那么分配像p.name
这样的属性 将无法正常工作。
(但是,我相信如果代码在严格模式下运行,它只会导致异常,否则尝试的分配将无声地失败。)
即使分配那些.name
和.price
属性,该代码仍然没有意义,因为p
是一个在该函数中未再次引用的局部变量。只有.some()
返回对匹配数组元素的引用才有意义,因为然后它将是一个对象,代码将更新该对象的属性。