好吧,这个问题可能听起来很荒谬,但是为什么没有实现通过 JS 修改 cookie。我问这个是因为在网络上,我看到了一些非常可怕的操作 cookie 的实现。
另外,为什么 cookie 不表示为对象?在我看来,如果 cookie 被表示为一个对象,那么操作它会容易得多。那么 document.cookie 可以只是对象的字符串表示。
好吧,这个问题可能听起来很荒谬,但是为什么没有实现通过 JS 修改 cookie。我问这个是因为在网络上,我看到了一些非常可怕的操作 cookie 的实现。
另外,为什么 cookie 不表示为对象?在我看来,如果 cookie 被表示为一个对象,那么操作它会容易得多。那么 document.cookie 可以只是对象的字符串表示。
document.cookie
,即使它听起来像一个简单的属性,实际上隐藏了函数访问(getter 和 setter)。
为什么 cookie 不是一个完整的结构化对象?我猜原因是:
回答评论:
document.cookie
就是这样,因为这就是它最初实施的方式。这是一个废话,我知道,但你必须记住早期网络的历史。第一个实现新功能的浏览器为所有其他浏览器设置了复制标准。
null == undefined
这与JavaScript 中的原因完全相同。旧的错误成为必需的实现细节,我们将永远坚持下去,或者直到下周,这取决于谁在积极致力于 w3 规范。
为什么没有通过JS修改cookie的实现?
因为它不会向后兼容。显然我们不能改变现有的实现,所以我们必须创建一个新的。在创建一个新的时,我们希望创建一个可以被现有的 JS 代码合理复制以回填旧的浏览器,但如果我们必须添加一个 polyfill 以使其正常工作,为什么还要添加新的浏览器的功能?
所以,我们永远不会看到更好的饼干,对吧?
错了。浏览器正在添加一个新的对象实现来在本地存储数据,它被称为localStorage
,它可以被 cookie 合理地复制到需要的地方。这也允许我们将本地信息与服务器信息分开(服务器可以在 cookie 上设置 HTTP 仅用于服务器专用 cookie)。