Javascript是一种令人难以置信的语言,像jQuery这样的库使得它几乎太容易使用了。
Javascript的原始设计者应该包含哪些语言,或者我们应该向他们施加什么压力才能添加到未来的版本中?
我想看到的事情: -
我不是Javascript的专家,所以也许这些已经存在,但还有什么呢?您是否希望看到其他编程语言的杀手级功能?
答案 0 :(得分:5)
阅读道格拉斯克罗克福德Javascript: The Good Parts作者的JSLint。这真的令人印象深刻,也涵盖了不好的部分。
答案 1 :(得分: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;
}
但由于那不是一个选项,我不得不求助于在每个对象上添加一个属性:
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
}
但这些对象不是我的,所以这使我的脚本突兀。该技术实际上是一个黑客,以解决我无法获得任何任意对象的可靠哈希键的事实。
另一种解决方法是为所有内容创建包装器对象,但通常需要一种从原始对象到包装器对象的方法,这需要原始对象上的expando属性。另外,如果原始对象是DOM元素,那么会创建一个循环引用,导致IE中的内存泄漏,因此这不是一种安全的跨浏览器技术。
对于Javascript库的开发人员来说,这是一个反复出现的问题。
答案 2 :(得分:1)
使用数组/对象作为没有字符串强制的键的能力可能会很好。
答案 3 :(得分:1)
Javascript的原始设计者应该包含哪些语言,或者我们应该向他们施加什么压力才能添加到未来的版本中?
他们应该聚在一起并决定在一起实施什么,而不是通过稍微不同的语言实现(命名无名称)相互竞争,以防止随之而来的巨大头痛过去15年中每个开发人员。
答案 4 :(得分:1)
Javascript缺少一个名称,使其与语言区分开来。
答案 5 :(得分:1)
有一些小事可以做得更好。
选择+
进行字符串连接是一个错误。 &
本来会更好。
for( x in list )
遍历索引会很令人沮丧,因为它使得使用文字数组变得困难。较新的版本有解决方案。
适当的范围界定会很好。 v1.7正在添加它,但看起来很笨重。
在对象中执行'private'和'protected'变量的方法有点模糊,难以记住,因为它利用了闭包以及它们如何影响范围。隐藏其机制的一些语法糖将是非常棒的。
老实说,我经常遇到的许多问题实际上都是DOM怪癖,而不是JavaScript本身。当然,另一个大问题是最新版本的JavaScript有一些有趣且有用的东西,比如生成器。不幸的是,大多数浏览器都停留在1.5。显然只有FireFox正在向前发展。
答案 6 :(得分:0)
文件IO丢失了....虽然有些人会说它并不真的需要它......