Array.prototype.some()是否返回文字?如果是这样,这段代码意味着什么?

时间:2014-11-23 01:08:02

标签: javascript arrays prototype

关于节点和表达的一本书的例子:

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分配属性是不会起作用?

1 个答案:

答案 0 :(得分:1)

Array.prototype.some() method返回一个布尔值。这是原始值,而不是“文字”。

如果p包含布尔值,那么分配像p.name这样的属性 将无法正常工作。

(但是,我相信如果代码在严格模式下运行,它只会导致异常,否则尝试的分配将无声地失败。)

即使分配那些.name.price属性,该代码仍然没有意义,因为p是一个在该函数中未再次引用的局部变量。只有.some()返回对匹配数组元素的引用才有意义,因为然后它将是一个对象,代码将更新该对象的属性。