document.cookie究竟是如何工作的?

Jac*_*k M 33 javascript debugging google-chrome javascript-debugger

如果我让Chrome document.cookie通过进入控制台并输入document.cookie;它来给我看,我会告诉我,说:

"name=John; gender=male";

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

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

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

怎么会这样?这是一个变量,不是吗?那么为什么赋值运算符不应该以它应该的方式工作呢?它实际上只是一些语法糖而不是一个真正的变量?如果是这样,糖究竟是什么?

T.J*_*der 32

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

阅读所有关于它的内容:

  • 对于"不寻常",请阅读:"设计得非常糟糕":). (37认同)
  • @Jack:`document`是ECMAScript规范所称的"宿主对象",而不是本机对象.宿主对象几乎可以做任何他们想做的事情,他们的语义大部分都在规范之外.最终,[作业](http://es5.github.com/#x11.13.1)成为主题上的抽象*[PutValue](http://es5.github.com/#x8.7.2)*来电宾语.主机环境(在本例中为浏览器)的作用取决于主机环境. (3认同)
  • @Daniel:这里没有分歧。我无法想象为什么它需要如此......迟钝,即使在当天也是如此。我的意思是,一个类似数组的东西,带有 `Cookie` 元素,多么前沿!;-) (2认同)
  • 我希望我可以更多地投票...这些信息节省了我的一天. (2认同)

Ale*_*ler 6

为什么不看看MDN?

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

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

  • 我希望我不会在这里遇到挑剔,但是你的第一个`document.cookie`的多元化是故意的吗?我不确定这是不是一个独特的概念. (2认同)