【问题标题】:How exactly does document.cookie work?document.cookie 究竟是如何工作的?
【发布时间】:2011-10-11 03:22:02
【问题描述】:

如果我通过进入控制台并输入 document.cookie; 让 Chrome 向我显示 document.cookie,它会给我说:

"name=John; gender=male";

但是如果我输入,比如说,document.cookie = 5;,它所做的只是将5; 添加到字符串的开头,所以我得到:

"5; name=John; gender=male";

如果我尝试document.cookie = null;,那么它甚至什么都不做。

这怎么可能?这是一个变量,不是吗?那么为什么赋值运算符没有按应有的方式工作呢?它实际上只是一点语法糖而不是真正的变量吗?如果是这样,糖到底掩盖了什么?

【问题讨论】:

  • 顺便说一句,我不知道这个问题的答案,但是许多语言允许运算符(包括在某些情况下的赋值,很奇怪)被自定义行为覆盖。这非常有用,但也可能导致混乱,例如您在此处的内容。
  • @Matthew:JavaScript 不是其中之一,除了宿主对象(如 document)几乎可以做任何他们想做的事情,因为它们不是原生对象。

标签: javascript debugging google-chrome javascript-debugger


【解决方案1】:

document.cookie 具有 非常 特殊行为。如您所见,分配给它添加(或更新)一个cookie(或多个cookie),而不是替换所有cookie。这很不寻常。

MDN阅读所有相关信息。

【讨论】:

  • @Daniel:这里没有异议。我无法想象为什么它需要如此……迟钝,即使在过去也是如此。我的意思是,带有Cookie 元素的类似数组的东西,多么前沿! ;-)
  • 那么这种“不寻常”的行为是如何实现的呢?是在解释器级别还是 javascript 支持某种运算符重定义?
  • @Jack:document 是 ECMAScript 规范所称的“宿主对象”,而不是本机对象。宿主对象几乎可以做任何他们想做的事情,它们的语义大多在规范之外。最终,the assignment 成为对宿主对象的抽象 PutValue 调用。主机环境(在本例中为浏览器)如何处理取决于主机环境。
  • 我希望我能投票更多...这个信息拯救了我的一天。
【解决方案2】:

Why not have a look at MDN?

document.cookies 的赋值运算符右侧的字符串应该是以分号分隔的键值对列表,即document.cookie = "aKey=5" 将设置/更新aKey cookie。

所以是的,document.cookie 表现出特殊行为。

【讨论】:

  • 我希望我不会在这里挑剔,但你的第一个 document.cookie 的复数是故意的吗?我不确定这是否是一个独特的概念。
  • 此外,它现在显示“这篇文章需要技术审查”。尽管如此,它仍然是一个很好的参考页面。谢谢!
【解决方案3】:

这是您的“issue”的示例。此外,它还说:

您只需将 cookie 的过期时间更新为 零。

【讨论】:

    猜你喜欢
    • 2011-06-26
    • 2021-08-15
    • 2012-06-08
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 2014-09-29
    • 2011-06-01
    • 1970-01-01
    相关资源
    最近更新 更多