什么是Javascript缺失?

Rik*_*ood 1 javascript programming-languages

Javascript是一种令人难以置信的语言,像jQuery这样的库使得它几乎太容易使用了.

Javascript的原始设计者应该包含哪些语言,或者我们应该向他们施加什么压力才能添加到未来的版本中?

我想看到的事情: -

  • 这种语言的某种编译版本,因此我们程序员可以更早地捕获更多错误,并为浏览器提供更快的解决方案.
  • 可选的严格类型(例如,能够将var声明为float并保持这种方式).

我不是Javascript的专家,所以也许这些已经存在,但还有什么呢?您是否希望看到其他编程语言的杀手级功能?

ere*_*non 5

阅读来自JSLint,Douglas Crockford 的作者的Javascript:The Good Parts.这真的令人印象深刻,也涵盖了不好的部分.


Ase*_*ore 5

我一直渴望和痛苦的一件事是对哈希的一些支持.具体来说,让我跟踪有关对象的元数据,而无需在该对象上添加expando属性.

Java提供Object.getHashCode()默认情况下使用底层内存地址; Python提供id(obj)了获取内存地址并可hash(obj)自定义的内容; Javascript也没有提供任何内容.

例如,我正在编写一个Javascript库,试图不引人注意地优雅地增强你给我的一些对象(例如你的<li>元素,甚至是与DOM无关的东西).假设我需要处理每个对象一次.所以在我处理完每个对象之后,我需要一种方法来"标记它".

理想情况下,我可以创建自己的哈希表或设置(以任何方式,实现为字典)来跟踪:

var processed = {};

function process(obj) {
    var key = obj.getHashCode();

    if (processed[key]) {
        return;    // already seen
    }

    // process the object...

    processed[key] = true;
}
Run Code Online (Sandbox Code Playgroud)

但由于这不是一个选项,我不得不求助于在每个对象上添加一个属性:

var SEEN_PROP = "__seen__";

function process(obj) {
    if (obj[SEEN_PROP]) {    // or simply obj.__seen__
        return;    // already seen
    }

    // process the object...

    obj[SEEN_PROP] = true;   // or obj.__seen__ = true
}
Run Code Online (Sandbox Code Playgroud)

这些对象不是我的,所以这使我的脚本突兀.该技术实际上是一个黑客,以解决我无法获得任何任意对象的可靠哈希键的事实.

另一种解决方法是为所有内容创建包装器对象,但通常需要一种从原始对象到包装器对象的方法,这需要原始对象上的expando属性.另外,如果原始对象是DOM元素,那么会创建一个循环引用,导致IE中的内存泄漏,因此这不是一种安全的跨浏览器技术.

对于Javascript库的开发人员,这是一个反复出现的问题.