问题标签 [ecmascript-harmony]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - ECMAScript 中的对象属性常量?
我已经看到了一些关于 ECMAScript Harmony 的建议,即能够使用关键字指定常量const
。但是,它似乎只在块作用域(即FunctionBody
和Program
)中可用。有没有办法将常量定义为对象属性(想象myObj.STATUS_OK
)?
我想建议的方法是使用properties
via Object.definePropert(y/ies)
,但这似乎不是很方便,是吗?
javascript - ECMAScript:Harmony / ES6 到 JavaScript 编译器
在阅读了 Peter 关于 JavaScript 的文章后,我注意到
Brendan Eich 表示,Harmony 的目标之一是成为 JavaScript 编译器的更好目标。
目前有两种流行的编译器,它们的ES:Harmony合规性有些模糊:
尽管 CoffeeScript 有一些合规性,但它并不是为 ES:Harmony 编译器而设计的,因此它对此没有用处。
Tracuer 似乎更严格地遵守 ES:Harmony 规范,但我不知道它是否打算成为一个完整的 ES:Harmony 编译器。
由于目标是将 ES6 编译为 ES3,因此还需要支持 ES5 功能(并且可能需要切换是将 ES5 编译为 ES3 还是将 ES6 编译为 ES3)。
- 目前是否还有其他项目旨在创建完整的 ES:Harmony to ES3 编译器?
- 知道标准是年轻/不稳定/不断变化的,开始编写这样的编译器是否明智。
- 当前是否有任何 ES5 -> ES3 编译器?
我在Traceur 邮件列表上留下了一个问题。
这种编译器的目标是向后兼容 ES3。没有在 ES3 中完全模拟 ES5 和 ES6。
javascript - Javascript 代理:节点代理、Harmony、带有魔法 getter 和 setter 的混合对象……在 Coffeescript 中?
我想要一个带有方法和私有变量的代理对象。
也就是说,所有正常的对象属性:
有一些原型:
其中枚举跳过私有变量/函数:
并且 get/set 将通过一个神奇的 getter/setter 运行:
到目前为止,我有这个使用节点代理的 hokey Coffeescript。有更好的答案吗?
生产
javascript - 为什么我不能在nowjs中扩展每个人的口袋?
我正在尝试在pocket
nowjs 的每个人中提供功能。我想_.extend
通过每个人的口袋来做到这一点,即everyone.now
。由于某种我无法理解的原因,_.extend
未能在客户端正确提供该功能。
这是我当前的代码:
在服务器端和客户端,我都可以做得now.foo()
很好。另一方面,now.bar()
因为now.bar
未定义而失败。客户端和服务器端都是这种情况。我试图在服务器端检查是否存在,如上最后一行所示。但是,此行记录undefined
.
Underscore 的extend
功能(显然)确实适用于其他对象,所以我猜它与 nowjs 使用的“神奇名称空间”有关。
为什么扩展不起作用,everyone.now
我怎样才能让它起作用?
编辑2:我对代理进行了更多研究。似乎通过传递变量名称来设置代理上的属性不起作用。我删除了我的第一个编辑,因为这个测试用例更加缩小了。
为什么这不起作用?这是一个错误吗?(大多数时候我自己问这个我知道不是,但这真的让我一无所知......)
日志结果:
显然,proxy[ key ] = "bar";
不会导致set
在代理上被调用。这是为什么?
javascript - 如何检查/迭代节点中的对象?
在我将对象字符串化并将其发送给客户端之前,我从 mongoose 查询中得到了一个结果(对象)并想要替换/删除一些键。
当我 console.log 对象时,一切都很好(列出了所有键,仅此而已)。当我在对象上执行 for..in 时,隐藏字段会突然弹出(而感兴趣的键,不要)。它们是有道理的——它们属于猫鼬——但我不想要它们。在对象上使用 Object.keys 或 Object.getOwnPropertyNames 时也会发生同样的事情 - 隐藏字段弹出窗口,没有用处。
所以我想用 util.inspect(obj,true,null,true) 检查元素并将结果记录到控制台。控制台上的结果是一样的,就好像我在没有检查的情况下直接 console.logged 对象一样。
现在,两个问题;
- 如何正确检查对象,以便我真正获得有关该对象的内部/隐藏信息?
- 如何遍历对象并仅获取字段?(是的,我正在 for..in 循环中进行 hasOwnProperty 检查)
//编辑
好,我知道了。经过一番调查,我意识到 mongoose 对象代理了它的属性并且有一个 toJSON 函数,这就解释了为什么 console.logs 在预期的输出结构中。解决方法是使用 Mongoose 自己的 toObject 方法;
这样,我可以遍历 Object.getOwnPropertyNames 并替换/删除我不想让客户知道的键!
javascript - 更改对象原型以更改 instanceof 结果的好方法?
我想评论这个老问题,但它似乎被锁定了。
这是我的用例:
obj
使用构造函数创建一个对象Base
。obj instanceof Base
返回真。- 我想改变它的原型
obj
,使它看起来好像obj
是从Derived
. 也就是说,我要obj
访问方法Derived
obj instanceof Derived
返回真
原因是obj
层次结构中有一个类型,该类型在创建时是未知的,并由之后发生的事情决定。我希望能够将它移到层次结构中。
我相信我可以做到这一点
obj.__proto__ = Derived.prototype;
但__proto__
将在下一版本的 JavaScript 中弃用。自从我上面链接的问题被问到后,代理API 发生了变化,似乎不支持我的用例。
我的用例是否有替代实现现在存在或计划在未来实现?
我现在能看到的唯一选择是使用
并且永远不要存储对 obj 的多个引用,但这样的代价是相当不便的。
这是一个演示这个问题的小提琴。
javascript - 如何在 JavaScript 中使用五位长的 Unicode 字符
在 JavaScript 中,我可以这样做:
但我不能这样做
它将被解释为“\u1D15”后跟“D”
有什么解决方法吗?
2012-07-09 更新:ECMAScript Harmony 提案现在包括对所有 Unicode 字符的支持。
node.js - 在 nodejs 中启用 Harmony 代理
是否可以在 nodejs 中启用 EcmaScript 6 Harmony 代理?如果是这样,有什么优点和缺点?有没有关于如何使用它们的文档?谢谢 !
node.js - ES6 代理无法拦截数组索引
这是我的测试代码(使用node --harmony-proxies foo.js
:
为什么最后两行无法打印 5,为什么代理无法拦截看起来像整数的属性?它是一个实现错误还是它是如何指定的?是否有单独的方法来拦截数组索引,以便我可以实现自己的数组(例如稀疏数组)?
javascript - Javascript:在各种浏览器中是否有与 caniuse.com 等效的 HTML5 API/ECMAScript5/ECMAScript6?
在各种浏览器中是否有与 caniuse.com 等效的 HTML5 API/ECMAScript5/ECMAScript6?
caniuse.com 确实有一些 javascript 覆盖,但是像http://caniuse.com/#feat=filesystem这样的页面并没有真正告诉你除了 yes/no/partially 之外的任何内容。实际上,我正在寻找类似 quirksmode 与 caniuse 交叉的东西,在那里我可以详细查看任何 API 或方法,并查看它当前在哪里实现(并且没有错误)。例如,一个网站,我可以查看哪些浏览器的哪些版本当前可以使用它: