我只在Firefox中对此进行了测试,但显然您可以使用空字符串作为对象中属性的键.例如,请在此处查看第一个属性:
var countsByStatus = {
"": 23, //unknown status
"started": 45,
"draft": 3,
"accepted": 23,
"hold": 2345,
"fixed": 2,
"published": 345
}
Run Code Online (Sandbox Code Playgroud)
在浏览EcmaScript规范时,似乎(至少在5中),属性键被定义为字符串,字符串被定义为0或更多字符.这意味着根据规范,空字符串是有效的属性名称.
无论如何,我很想在一段代码中使用它,我在计算数据项状态的一些计数摘要(类似于我上面所示).有些项目可能没有状态,我需要一个占位符.由于状态是用户可定义的,我不想冒险使用可能冲突的虚拟词.
它看起来如此简单和优雅,在查看数据时我可以很容易地判断空字符串是什么意思.它还使代码更有效,因为空字符串将是没有状态的项目中状态的确切值.
但与此同时,我的直觉告诉我它出了问题.我的意思是,除了某些浏览器可能不支持这种情况的机会之外,我觉得我在JavaScript中遇到了一个将在某天修复的错误.但是,与此同时,我曾经对我现在每天使用的许多其他JavaScript功能产生了同样的感觉(例如我发现&&和||返回其中一个操作数的值的时间,而不仅仅是对或错).
我有一个带有textarea的表单,可以包含使用众多第三方富文本编辑器之一编辑的大量内容(例如,博客文章).我正在尝试实现类似自动保存功能的东西,如果它被更改,它应该通过ajax提交内容.但是,我必须解决这样一个事实:我作为选项的一些编辑器不支持"isdirty"标志,或者"onchange"事件,我可以用它来查看自上次保存以来内容是否已更改.
因此,作为一种解决方法,我想要做的是将内容的副本保存在变量中(让我们称之为lastSaveContent),从最后一次保存开始,并在"自动保存"功能触发时将其与当前文本进行比较(在计时器上)看它是否不同.但是,我担心可能会占用大量文档的内存量.
在lastSaveContent变量中存储某种散列而不是整个字符串,然后比较散列值会更有效吗?如果是这样,你能推荐一个好的javascript库/ jquery插件,为这个要求实现适当的哈希吗?