Questions tagged «ecmascript-5»

ECMAScript是Ecma国际标准262的名称。它基于Netscape交付给Ecma进行标准化的脚本语言JavaScript。第5版是第4版取消后对第3版规范的更新。它添加了新功能,包括严格模式,getter和setter,JSON对象以及Object,Array,Date和Function原型的新方法。

19
var关键字的目的是什么?何时应使用(或省略)?
注意:从ECMAScript版本3或5的角度提出了这个问题。随着ECMAScript 6版本中引入新功能,答案可能会过时。 varJavaScript中关键字的功能到底是什么,它们之间有什么区别 var someNumber = 2; var someFunction = function() { doSomething; } var someObject = { } var someObject.someProperty = 5; 和 someNumber = 2; someFunction = function() { doSomething; } someObject = { } someObject.someProperty = 5; ? 您什么时候会使用其中一个?为什么/会做什么?

7
获取对象键的数组
我想以jQuery或纯JavaScript的形式获取JavaScript对象的键作为数组。 有没有比这更详细的方法? var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' }; var keys = []; for (var key in foo) { keys.push(key); }

8
冻结和密封之间的区别
我刚刚听说过JavaScript方法freeze和seal,它们可用于使任何对象不可变。 这是一个简短的示例如何使用它: var o1 = {}, o2 = {}; Object.freeze(o2); o1["a"] = "worked"; o2["a"] = "worked"; alert(o1["a"]); //prints "worked" alert(o2["a"]); //prints "undefined" freeze和之间有什么区别seal?它们可以提高性能吗?

12
[] .forEach.call()在JavaScript中做什么?
我看着一些代码片段,发现多个元素在节点列表上调用了一个函数,并将forEach应用于空数组。 例如,我有类似的东西: [].forEach.call( document.querySelectorAll('a'), function(el) { // whatever with the current node }); 但我不明白它是如何工作的。谁能解释一下forEach前面的空数组的行为以及其call工作原理?


2
Javascript减少一个空数组
当我减少数组时,我试图将数字设为零,但我不清楚地了解函数的行为 [].reduce(function(previousValue, currentValue){ return Number(previousValue) + Number(currentValue); }); 结果 TypeError: Reduce of empty array with no initial value 似乎如果数组为空,我无法减少它 [""].reduce(function(previousValue, currentValue){ return Number(previousValue) + Number(currentValue); }); 结果 "" 如果数组中唯一的元素是一个空字符串,则检索一个空字符串

7
为什么在JavaScript中对象不可迭代?
为什么默认情况下无法迭代对象? 我经常看到与迭代对象有关的问题,常见的解决方案是迭代对象的属性并以这种方式访问​​对象中的值。这似乎很常见,使我想知道为什么对象本身不可迭代。 for...of默认情况下,像ES6这样的语句很适合用于对象。因为这些功能仅适用于不包含{}对象的特殊“可迭代对象” ,所以我们必须仔细研究以使其适用于要用于它的对象。 for ... of语句创建一个循环,循环遍历可迭代对象 (包括Array,Map,Set,arguments对象等)... 例如,使用ES6生成器函数: var example = {a: {e: 'one', f: 'two'}, b: {g: 'three'}, c: {h: 'four', i: 'five'}}; function* entries(obj) { for (let key of Object.keys(obj)) { yield [key, obj[key]]; } } for (let [key, value] of entries(example)) { console.log(key); console.log(value); for (let …

17
动态设置嵌套对象的属性
我有一个对象,它可以是任意多个级别的深度,并且可以具有任何现有属性。例如: var obj = { db: { mongodb: { host: 'localhost' } } }; 在此我想设置(或覆盖)属性,如下所示: set('db.mongodb.user', 'root'); // or: set('foo.bar', 'baz'); 属性字符串可以具有任何深度,并且值可以是任何类型/事物。 如果属性键已经存在,则不需要合并对象和数组作为值。 前面的示例将产生以下对象: var obj = { db: { mongodb: { host: 'localhost', user: 'root' } }, foo: { bar: baz } }; 如何实现这种功能?

1
为什么019不是JavaScript语法错误?还是为什么019> 020
如果我输入019 > 020JavaScript控制台(在Chrome和Firefox中都经过测试),则会得到答案true。 这是由于020被解释为OctalIntegerLiteral(等于16),而019显然是被解释为DecimalLiteral(等于19)。如19大于16,019 > 020则为true。 让我感到困惑的是为什么019将其解释为DecimalLiteral第一位。这是什么产品?DecimalIntegerLiteral不允许019: DecimalIntegerLiteral :: 0 NonZeroDigit DecimalDigits_opt OctalIntegerLiteral也不允许019(因为9不是八进制数字): OctalIntegerLiteral :: 0 OctalDigit OctalIntegerLiteral OctalDigit OctalDigit :: one of 0 1 2 3 4 5 6 7 因此,从我在规范中看到的内容来看,019实际上应该拒绝它,我不明白为什么将其解释为十进制整数。 我猜这里有某种兼容规则,但是我没有找到正式的定义。可以请任何人帮助我吗? (为什么需要这样做:我正在使用JavaCC开发Java的JavaScript / ECMAScript解析器,因此必须特别注意其规范-及其偏差。)


3
我可以为特定功能禁用ECMAscript严格模式吗?
我在MDC或ECMAscript规范上找不到关于我的问题的任何信息。可能有人知道解决此问题的一种更“ hacky”的方法。 我正在调用"use strict"环境中的每个javascript文件。我所有的文件都这样开始 (function(win, doc, undef) { "use strict"; // code & functions }(window, window.document)); 现在,我有一个自定义函数来处理错误。该函数使用该.caller属性提供上下文堆栈跟踪。看起来像这样: var chain = (function() { var _parent = _error, _ret = ''; while( _parent.caller ) { _ret += ' -> ' + _parent.caller.name; _parent = _parent.caller; } return _ret; }()); 但是,当然,在严格模式下,它.caller是一种不可删除的道具,在检索时会抛出该道具。所以我的问题是,有人知道禁用更严格的“功能方面”的方法吗? "use strict";被调用后被所有函数继承。现在我们可以通过仅在特定功能"use …

6
“锁定” JavaScript对象是否对性能有好处?
JavaScript 1.8.5(ECMAScript 5)添加了一些有趣的方法,这些方法可以防止以后以某种程度的彻底性修改传递的对象: Object.preventExtensions(obj) Object.seal(obj) Object.freeze(obj) 大概这些要点是捕捉错误:如果您知道不想在某个点之后修改对象,则可以将其锁定,以便在以后无意间修改它时会引发错误。("use strict";证明您已经做到了。) 我的问题:在使用V8之类的现代JS引擎中,使用上述方法锁定对象是否有任何性能优势(例如,更快的属性查找,减少的内存占用)? (另请参阅John Resig的一个很好的解释-但是没有提到性能。)

10
什么时候使用Object.defineProperty()
我想知道什么时候应该使用 Object.defineProperty 为对象创建新属性。我知道我可以设置类似 enumerable: false 但是什么时候真的需要这个?如果您只是设置一个属性,例如 myObject.myprop = 5; 它的描述符都设置为true,对吗?当你们使用.defineProperty()的冗长调用以及出于什么原因时,我实际上更好奇。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.