首先:我正在使用一个相当模糊的javascript嵌入式实现作为Adobe InDesign CS3的脚本引擎。这种实现有时偏离“标准”javascript,因此我的问题。
我正在使用John Resig's jsdiff library(source here)来比较两个文档之间的文本选择。 jsdiff使用vanilla对象作为关联数组,将文本中的单词映射到另一个对象。 (参见第129行的jsdiff.js中的“ns”和“os”变量。)
当文字中出现“反映”一词时,我的头痛开始了。 “reflect”是所有对象上的默认只读属性。当jsdiff尝试将关联数组的值分配给ns ['reflect']时,一切都会爆炸。
我的问题:这有什么办法吗?有没有办法在不使用明显的vanilla对象的情况下在javascript中执行哈希表?
基本规则:切换脚本引擎不是一种选择。 :)
答案 0 :(得分:5)
你可能会“提出错误的问题”(正如Raymond Chen所说);而不是试图避免使用vanilla对象,尝试更改关联数组成员的命名方式。
我试图接近这个的方式:而不是有一个数组成员ns [“reflect”],改变jsdiff构建数组的方式,使成员是ns [“_ reflect”]或其他一些变体在那。
答案 1 :(得分:1)
如果您使用的JS实现支持对象的hasOwnProperty方法,则可以使用它来测试是否已为对象显式设置属性,或者属性是否从其原型继承。例如:
if(object.hasOwnProperty('testProperty')){
// do something
}
答案 2 :(得分:0)
javascript中给定的对象只是关联数组,实际上没有另一个内置的哈希解决方案。您可以通过在某些数组周围包装类来创建自己的psuedo哈希表,尽管在涉及手动工作时可能会有显着的性能损失。
只是附注,我还没有真正使用或查看过jsdiff库,因此根据提示或技巧我无法提供任何有效的见解。