我看到有关“新”Object.create,使枚举可configuration的post。 但是,它依赖于Object.defineProperty方法。 我找不到这个方法的跨浏览器实现。 我们坚持写旧的Object.create吗? 我不能写在IE6 / 7中不起作用的东西。
有东西像 f.call(…) f.apply(…) 但是,那是这样的 (1, alert)('Zomg what is this????!!!11') “1”在这种情况下似乎没有多大意义,下面的工作就好了: (null, alert)('Zomg what is this????!!!11') (1, null, alert)('Zomg what is this????!!!11') (undefined, alert)('Zomg what is this????!!!11') 你能指出一个描述语法的ECMAScript的特定部分吗?
在一个未知的主机环境中,以ES5严格模式处理全局对象的build议方法是什么? ECMAScript不提供一个内置的方式来引用我知道的全局对象。 如果是这样,这是我正在寻找的答案。 在已知的环境中 ,全局对象通常具有自引用属性。 由于全局对象是全局范围的VO ,因此全局对象的属性是全局variables,所以我们可以使用它们从任何地方获取全局对象的句柄: 在networking浏览器中,我们可以使用window或self 。 在node.js中,我们可以使用global 。 但是,在所有主机环境中并不一定如此。 据我所知,Windows Script Host不提供任何方法来访问全局对象。 在WSH中获取全局对象的推荐方法似乎是在不parsing对象的上下文中使用this关键字。 例如: var GLOBAL = (function(){return this}()); 这种技术将适用于任何主机环境,但不能用于严格模式,因为未定义的方式不会在严格模式下引用全局对象: 如果在严格模式代码中评估这个值,那么这个值不会被强制转换为对象。 null或undefined的这个值不会被转换为全局对象,并且原始值不会被转换为包装器对象。 通过函数调用传递的值(包括使用Function.prototype.apply和Function.prototype.call调用的函数)不会强制将此值传递给对象(10.4.3,11.1.1,15.3.4.3,15.3。 4.4)。 正如所料,以下代码导致undefined : (function(){ "use strict"; var GLOBAL = (function(){return this}()); console.log(GLOBAL); }()); 那么, 在任何环境下,无论严格模式如何处理全局对象,正确的方法是什么? 顺便说一句,我目前的方法是嗅探引用全局对象的全局variables,如下所示: var self, window, global = global || window || self; …然后只是使用global 。 我认为这是一个不好的解决办法,其中大部分是相当明显的,并没有解决WSH问题。
任何想法为什么JSON遗漏NaN和+/- Infinity? 它把JavaScript放在奇怪的情况下,否则这些对象可能是可序列化的,如果它们包含NaN或+/-无穷大值,则不是。 看起来像这样被扔石头:见RFC4627和ECMA-262 (24.3.2,JSON.stringify,注4,在最后编辑页507): 有限数字通过调用ToString(number)进行string化。 无论符号如何, NaN和Infinity都表示为String null 。
ECMAScript和JavaScript有什么区别? 从我推断,ECMAScript是标准的,JavaScript是实施。 它是否正确?
为什么在JavaScript中不赞成arguments.callee.caller属性? 它已被添加,然后在JavaScript中被弃用,但它被ECMAScript完全省略。 一些浏览器(Mozilla,IE)一直支持它,并没有任何计划在地图上删除支持。 其他(Safari,Opera)已经采用了对它的支持,但是在旧版浏览器上的支持是不可靠的。 有没有充分的理由把这个有价值的function放在一边呢? (或者,有没有更好的方法来获取调用函数的句柄?)