【问题标题】:What is the difference between request.cookies['name'] and request.cookies.name in Node.js + ExpressNode.js + Express 中的 request.cookies['name'] 和 request.cookies.name 有什么区别
【发布时间】:2013-01-25 02:17:39
【问题描述】:

假设我正在使用 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 将被返回。

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

【问题讨论】:

    标签: node.js cookies express


    【解决方案1】:

    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"
    

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

    【讨论】:

    • 感谢您的详细解释
    【解决方案2】:

    性能实际上是一样的,see jsperf.

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

    例子:

    cookies['connect.sid']  // OK
    cookies.connect.sid     // error
    

    【讨论】:

      【解决方案3】:

      没有区别。只是 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]); 
      }
      

      其他的只需使用简单的符号,这样你的代码就会更易读,也更容易被其他开发者理解

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-06
        • 2011-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多