gpt4 book ai didi

javascript - 是否有 ECMAScript 标准未记录的任何跨浏览器 JavaScript 功能?

转载 作者:行者123 更新时间:2023-11-29 22:38:21 26 4
gpt4 key购买 nike

我所说的跨浏览器功能是指在所有 5 种主要浏览器中都实现的功能。 (测试版也可以)

此类功能的一个示例是 JSON 对象,它随着 IE8 的发布而成为跨浏览器,但直到 ECMAScript 第 5 版(九个月后)才被标准化。

既然第 5 版已经发布,是否还有其他跨浏览器(因此可以安全使用)但未被 ECMAScript 标准记录的功能?

最佳答案

类似于您的 JSON 对象示例的是 Array.prototype 方法。

许多浏览器 vendor 在 ES5 之前很久就实现了它们,例如 Mozilla ,从 2005 年 9 月开始为它的 JavaScript(tm) 1.6 版本实现它们。

ES3-ES5 之间的其他差距 - 直到 ES5 才描述 - 是:

  • 不抛出 for (var prop in null)undefined,在 ES3 中应该发生 TypeError
  • 不要在 block 内抛出 FunctionDeclarations,例如:

     { function foo () {} }

    FunctionDeclarations 允许在 Program 级别(任何东西之外的全局代码)或在函数的 FunctionBody 内,Blocks 只能包含报表。

  • 带有 LineContinuations 的字符串,例如:

    var s = 'foo \
    bar'; // 'foo bar'

还存在其他有趣的东西,例如非八进制数:

var n = 08;

上面的 NumericLiteral 在任何版本的 ECMAScript 标准中都是无效的

DecimalLiteral语法不允许文字以 0 开头(当然 0 文字除外)和 OctalIntegerLiterals 的语法被指定取一个零,然后是从 0 到 7 的数字(仅 0[0-7]+),因此文字 0809应该产生一个SyntaxError

但在我测试过的任何实现中都不会发生这种情况,它们被视为 DecimalLiteral,(08 产生 8)。

Firefox 是唯一会向您显示警告的实现:

08 warning

编辑:当今存在的另一个广泛传播的非标准功能是可调用正则表达式

此功能由 Mozilla 不久前引入,后来被 WebKit JSC、V8 和 Opera JS 引擎克隆。

基本上,您可以调用 RegExp 对象,就像它们是函数一样,只是语法糖 RegExp.prototype.exec 方法的别名:

var re = /foo/;
re('foobar'); // ["foo"], just an alias for:
re.exec('foobar'); // ["foo"]

此功能完全是非标准的,因为 ES3 和 ES5 不允许在 RegExp 实例上定义 [[Call]],因为它们的内部方法和语义是完全指定。

由于在这些实现中 RegExp 对象实现了 [[Call]] 内部方法,它们被 typeof 运算符识别为函数:

typeof /foo/; // "function" in some implementations

关于javascript - 是否有 ECMAScript 标准未记录的任何跨浏览器 JavaScript 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4125549/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com