问题标签 [ecmascript-5]
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 - 任何写出javascript的高级语言?
我正在寻找一种能写出 javascript 的高级语言。换句话说,这种语言与 javascript 的关系类似于 C++ 与汇编代码的关系。
这种高级语言的要求是类型安全、易于重构、能够拥有类、继承等(有点像 java/C#/vb.net)。
优点是我可以用这种更高级的语言编写代码,而不必依赖“hacks”来将继承带到 javascript。此外,我不必进行任何运行时类型/鸭子检查,因为高级语言将施加类型安全限制,并且生成的 javascript 只会“完成工作”。
与在汇编中编码相比,使用 C++ 编码时我们可以拥有的任何其他优势将是其他优势。
我实际上打算自己尝试编写这种高级语言,但它的工作量太大,我想知道是否有人实际上已经做过类似的事情。
javascript - 为什么我们使用 `Boy.prototype = new Human;` 来模拟继承?
我不明白为什么每个人都在使用Boy.prototype = new Human;
模拟继承。看,我们要的是A的函数对吗?我们可以在不实例化新 A 的情况下做到这一点(事实上,实例化新 A 确实会给我们带来不希望的结果,因为我们实际上正在运行我们不想要的实例化函数)
那么这不是更好的解决方案吗?
假设我们是如此特殊并且不仅想要 Human.prototype 中的可枚举属性,我们仍然可以通过在原型链上使用Object.getOwnPropertyNames
和调用它来实现它,而原型链反过来又可以通过Object.getPrototypeOf
.
Boy.prototype = new Human;
那么当我们有更好的选择时,模拟继承到底有什么好处呢?
javascript - 是否有实例共享相同的功能但同时具有私有变量?
我有这段代码:
现在 ._name 不是“私人的”。我想将 ._name 设为“私有”,但同时我不希望为 Human 的每个实例创建额外的函数(换句话说,tom.Shout 必须 === 到 john.Shout),因为为每个实例都很好..不必要(好的题外话 - 我们可以在另一个线程上讨论这个)
我的结论是,我想要实现的目标(让 ._name 为“私有”,同时拥有 ._name tom.Shout===john.Shout
)是不可能的。
但我只想在得出任何结论之前有 200% 的把握。
(只要满足要求,我欢迎任何 hack,即不为每个实例创建附加功能)
如果我们必须创建额外的函数来进行范围界定,那很好,但这个数字应该是一个固定的数字,并且这个数字不应该随着 Human 的每个额外实例而增加。
javascript - JavaScript:测试未定义值的变量;测试对象是否为数组
typeof value === "undefined"
和有区别value === undefined
吗?为什么
Array.isArray()
在 ECMAScript 5 中需要 JavaScript?我不能打电话value instanceof Array
来确定给定的变量是否是一个数组吗?
javascript - Javascript 在浏览器中获取和设置可用性
哪些浏览器不支持对象原型的 get 和 set 方法?我相信这是 ES5 的一个特性,我知道它可以在 Chrome 中运行,但我想知道它是否可以安全地用于 ajax 应用程序。这是一个例子:
javascript - 我可以为特定功能禁用 ECMAscript 严格模式吗?
我在 MDC 或 ECMAscript 规范上找不到任何关于我的问题的信息。可能有人知道一个更“hacky”的方法来解决这个问题。
我正在调用"use strict"
我环境中的每个 javascript 文件。我所有的文件都是这样开始的
现在,我有一个处理错误的自定义函数。该函数使用该.caller
属性来提供上下文堆栈跟踪。看起来像这样:
但是当然,在严格模式下.caller
是一个不可删除的道具,在检索时会抛出。所以我的问题是,有没有人知道如何禁用严格的“功能明智”?
"use strict";
被调用后被所有函数继承。现在我们可以通过在特定函数"use strict";
的顶部调用来在特定函数中使用严格模式,但是有没有办法实现相反的效果?
javascript - JavaScript:严格模式和匿名函数
几乎我所有的 JS 文件都包装在匿名函数中。如果我"use strict";
在匿名函数之外包含,严格模式是否仍适用于匿名函数?
例如,下面脚本中的匿名函数内部是否应用了严格模式:
javascript - 让简单的搜索算法更优雅
这循环遍历数组并将找到的第一个函数转换为组合函数。
我讨厌那个found = false
变量/计数器。我该如何摆脱它?
作为算法。
更新
使用 for 循环
javascript - EcmaScript5 功能
我对 ES3 有相当的了解,但我对 ES5 的特性并不是很了解。我 - 或多或少 - 知道:
Object.create()
,Object.freeze()
"use strict"
- getter 和 setter
- Array.prototype的方法
map()
,filter()
,every()
,some()
JSON.parse()
但我确定我错过了其他好东西。此外,我不知道上述所有细节:例如,我不确定"use strict"
.
是否有一个很好的资源可以学习 ES5 的所有细节,特别是 ES3,除了阅读最终的最终最终草案吗?
javascript - v8 何时实现 ECMAScript 5?
我注意到v8在 ECMAScript 第 5 版的问题上相当沉默。
V8 实现 ECMA-262 第 3 版中指定的 ECMAScript,并在使用 IA-32 或 ARM 处理器的 Windows XP 和 Vista、Mac OS X 10.5 (Leopard) 和 Linux 系统上运行。
即使是错误跟踪器似乎也很安静......
V8 是 ECMAScript 的实现,而不是 JavaScript。后者是 Mozilla 制作的 ECMAScript 的非标准化扩展。V8 旨在与 JSC 插件兼容,JSC 是 WebKit/Safari 中的 ECMAScript 实现。因此,它实现了许多也在 JSC 中的 ECMAScript 的非标准扩展,其中大部分也是 Mozilla 的 JavaScript 语言。没有计划将 JSC 中没有的非标准特性添加到 V8。
有趣的是,他在 2010 年 10 月 8 日写道,当时 ECMAScript 5 于 2009 年 12 月发布,两个月前 Javascript 1.8.5——ECMAScript 5 的超集——发布。
所以问题仍然存在,谷歌什么时候会更新 v8 以在 ECMAScript 第 5 版上运行?是否有升级到 ECMAScript 最新标准化的计划?