0

考虑我在我使用 express 框架的 cookieParser 中间件的 Node.js 应用程序中保存一个 cookie。

app.use(express.cookieParser());

app.get('/setCookie', function(req, res){
   res.cookie('String_cookieName', 'String_value', { expires: new Date(Date.now() + 18000000), httpOnly: true }); // +5 Hours expiry
});

在阅读它们时,我遇到了两个选择:

  1. request.cookies['String_cookieName']
  2. request.cookies.name

两者都会返回我string_value为我的 cookie ( 'String_cookieName') 设置的 ,否则如果过期undefined将被返回。

但我的问题是哪一个在性能方面更快/更高效?

4

3 回答 3

3

Request.cookies 只是一个对象。您可以使用您编写的任一方法访问对象的任何成员。当您已经知道要访问的字段的名称时,通常使用 object.xxx,而当字段名称是动态的时,通常使用括号;例如:

var variable = "foo";
object[variable] = "bar";

variable = "test";
object[variable] = "qwax"

console.log(object.foo); //"bar"
console.log(object.test); //"qwax"

据我所知,两者都没有比另一个快得多,因此如果您正在访问静态字段,则可以互换使用它们。

于 2013-01-24T11:18:54.373 回答
1

性能实际上是相同的,请参阅 jsperf。

许多 cookie 示例使用方括号将属性作为字符串,因为通常包含使用点表示法无法直接访问的字符。

例子:

cookies['connect.sid']  // OK
cookies.connect.sid     // error
于 2013-01-24T18:17:39.777 回答
0

没有区别。只是 JavaScript 有两种访问对象字段的方式。

在我看来,最好使用像 request.cookies.name 然后 request.cookies['name'] 这样的简单表示法,除非您循环遍历对象的许多字段并为每个字段应用相同的操作。

//lets say you have object like one below: var someObj = {};
someObj.x1 = 1; 
someObj.x2 = 2; 
someObj.x3 = 3; 
someObj.x4 = 4;
someObj.x5 = 5; 
... 
someObj.x20 = 20;

//And if you want to output properties 3 to 12 
//you can do like that
for(var i = 3; i<12; ++i)
{
   console.log(someObj['x' + i]); 
}

否则,只需使用简单的符号,这样您就可以使代码更具可读性,并且其他开发人员也更容易理解

于 2013-01-24T12:33:59.947 回答