标签: ecmascript-3

为什么变量对象在ES5中被改为词汇环境?

ES5将变量对象(VO)更改为词汇环境.这种变化的动机是什么,因为VO作为感知已经非常明显了?

javascript lexical-scope ecmascript-5 ecmascript-3

5
推荐指数
1
解决办法
382
查看次数

使用 TypeScript 针对不同的 Javascript 版本

TypeScript 可以全局定位不同版本的 Javascript - 您可以在转译 ES3、ES5 或 ES6 之间切换。

我们必须支持 IE,所以 ES3 是我们的最低公分母。

然而,好的浏览器(如 Chrome)已经支持 ES6,并且能够通过优化运行明显更小的 ES6 代码。

因此,我想从同一个 TypeScript 源为 IE 提供 ES3,为 Chrome 提供 ES6。

  • 有没有办法让 TypeScript 转译多个 JS 文件(可能是*.es3*.es6或类似的东西),以便我们可以选择要提供的版本?(最好是 VS 2015)

  • 或者,在 C# 中,我可以访问 TypeScript 转译器以在运行时完成该步骤吗?

visual-studio ecmascript-5 typescript ecmascript-6 ecmascript-3

5
推荐指数
1
解决办法
2979
查看次数

JavaScript中的常量模式

释放javascript之前的实现常量如何ES5

据我所知,这里没有get/set东西,没有writable财产,没有const文字,没有Object.freeze东西,那么如何使自己的常数不变呢?

例如, Math.PI

在此处输入图片说明

javascript design-patterns constants ecmascript-3

2
推荐指数
1
解决办法
210
查看次数

arguments.slice() 应该在 ES5 中工作吗?

我正在Javascript 上观看Crockford - 第三幕:在大约 41 分 26 秒时发挥终极作用。他屏幕上的代码arguments.slice()以一种导致出错的方式使用。

function curry(func){
    var args = arguments.slice(1);
    ...
}
Run Code Online (Sandbox Code Playgroud)

他是这样解释的:

我将首先得到一个参数数组,除了第一个,因为第一个是一个函数,我不需要那个。在这种情况下,我假设我在 ES5 上,所以我没有做可怕的 Array.prototype.apply()把戏。

问题是运行会arguments.slice()导致此错误:

Uncaught TypeError: arguments.slice is not a function

我正在测试肯定有 ES5 的现代浏览器!我可以让代码工作的唯一方法是,如果我使用一些“可怕的”技巧,(如他所称),例如Array.prototype.slice.apply(arguments, [1])[].slice.call(arguments, 1);.

他只是误会了吗?他的幻灯片有错别字吗?为什么arguments.slice()在我的 ES5 浏览器中不起作用?

javascript function ecmascript-5 ecmascript-3

2
推荐指数
1
解决办法
1535
查看次数

如何从特定类别中获取所有 Unicode 字符?

例如,如何x-y\uxxxx\Uxxxxxxxxx从连接符标点 ( Pc ) 类别中获取代码点模式,用于扫描 ECMAScript 3/JavaScript 标识符?

原始问题

我需要帮助来验证词法扫描仪的 ECMA-262(3º 版,7.6)标识符的有效字符(代码点)。

语法引用

Identifier ::

  • IdentifierName 但不是 ReservedWord

IdentifierName ::

  • IdentifierStart
  • IdentifierName IdentifierPart
  • IdentifierStart ::
  • UnicodeLetter
  • $
  • _
  • \ UnicodeEscapeSequence # 不需要检查这个

IdentifierPart ::

  • IdentifierStart
  • UnicodeCombiningMark
  • UnicodeDigit
  • UnicodeConnectorPunctuation

UnicodeLetter ::

  • Unicode 类别中的任何字符“大写字母 ( Lu )”、“小写 > 字母 ( Ll )”、“大写字母 ( Lt )”、“修饰符字母 ( Lm )”、“其他字母 ( Lo )”或“字母”数(Nl)”。

UnicodeCombiningMark ::

  • Unicode 类别“非间距标记 ( Mn )”或“组合间距标记 ( Mc )”中的任何字符

UnicodeDigit ::

  • Unicode 类别“十进制数 ( …

javascript unicode ecmascript-4 ecmascript-3

2
推荐指数
1
解决办法
1031
查看次数

如何将对象从 Javascript (Adobe CEP) 传递给 Adob​​e ExtendScript?

我正在使用Adobe CEP(它允许开发人员为 Adob​​e CC 产品创建窗口扩展)。我的大部分代码是现代 JavaScript(该平台使用 Chromium 57、Node.js 7.7.4)。 但是,为了访问 DOM,我需要在 Adob​​e ExtendScript 中编写一些函数并从普通 JS 中执行它们。唯一的方法是使用他们提供的csInterface.evalScript(script, callback). script必须是一个字符串,在我的例子中是一个转换为字符串的函数调用。我希望能够通过 将对象传入和传出 ExtendScriptevalScript,但evalScript只接受和返回一个字符串。

目前,我将每个对象属性作为它自己的参数传递。这很笨拙,但它有效。

我的第一个虽然是JSON.stringify(),但不幸的是 ExtendScript 是 ECMAScript 3 的方言,这意味着JSON.parse()支持.

我不能只是将对象参数连接到脚本函数调用中,因为这样字符串的计算结果为foo([object Object]).

我见过像eval()/uneval()或这样的函数Object.toSource(),但 Chromium 不支持这些函数。

这是一个示例,类似于我当前的方法:

函数.js (ES3/ExtendScript)

function drawCircle(x, y, name) {
    // pick a layer
    var layer = app.activeDocument.layers[0];

    var diameter = 10;
    var …
Run Code Online (Sandbox Code Playgroud)

javascript extendscript ecmascript-3

2
推荐指数
1
解决办法
1877
查看次数

由表达式文字生成的正则表达式是否共享单个实例?

以下代码片段(来自 Crockford 的Javascript:The Good Parts)演示了由正则表达式文字创建的 RegExp 对象共享单个实例:

function make_a_matcher( ) {
    return /a/gi;
}

var x = make_a_matcher( );
var y = make_a_matcher( );

// Beware: x and y are the same object!

x.lastIndex = 10;

document.writeln(y.lastIndex); // 10
Run Code Online (Sandbox Code Playgroud)

问题:这与其他文字一样吗?我尝试修改上面的代码以使用字符串"string",但出现了一堆错误。

javascript regex instance literals ecmascript-3

2
推荐指数
1
解决办法
90
查看次数