标签: ecma262

JavaScript:可以使用单引号('use strict')启用ECMAScript 5的严格模式("use strict")吗?

JavaScript并不关心你的字符串是双引号"double"还是单引号'single'.

ECMAScript 5的严格模式的每个示例都"use strict"使用双引号启用它.我可以执行以下操作(单引号):

alert(function(){
  'use strict';
  return !this;
}());
Run Code Online (Sandbox Code Playgroud)

如果启用了Strict模式,则返回true,否则返回false.

javascript strict ecma262 ecmascript-5

38
推荐指数
3
解决办法
5262
查看次数

EcmaScript 5浏览器实现

所以Safari和Chrome已经开始尝试实现一些ES5的东西了.例如,Object.create就在其中.

如果有一个网站显示浏览器的进展,你们有没有人知道吗?ATM我需要使用Object.freeze,并希望看到支持哪些浏览器(如果有的话).

javascript cross-browser ecma262 ecmascript-5

36
推荐指数
1
解决办法
1万
查看次数

JavaScript的双等于(==)总是对称的吗?

在许多情况下,JavaScript的类型强制相等运算符不可传递.例如,请参阅" JavaScript等同传递性很奇怪".

但是,是否有任何情况下,在==没有对称?也就是说,这里a == btrueb == afalse

javascript symmetric equivalence ecma262 comparison-operators

36
推荐指数
3
解决办法
3660
查看次数

哪个(javascript)环境支持ECMAscript 5严格模式?(又名"使用严格")

在我写这篇文章时,ECMAScript 5正处于最终草案中; 它是由于包含一个严格模式,它将阻止您使用eval和其他限制分配给全局对象.(John Resig的文章是一个很好的介绍.)

通过在文件(或函数)的顶部包含字符串"use strict"来触发这种神奇的保密模式.但是,在旧环境中,"use strict"是一种无操作.如果你添加"use strict"并且不在严格的环境中测试它,你可能会留下一个非常严格的代码的定时炸弹,当它真正遇到严格的环境时它会破坏.

哪些环境实际上尊重"使用严格"?

javascript strict ecma262 ecmascript-5

34
推荐指数
3
解决办法
7335
查看次数

带有自定义类的QtScript instanceof会抛出与原型相关的错误

我有一个Qt项目,它使用QtScript模块使我的应用程序的某些组件可编写脚本.

在多次尝试使现有类直接在QtScript中可用之后,我选择使用继承QObject和QScriptable的包装类(主要是因为我有一些非qobject派生类,这些类是由其他人继承的,它们是否继承QObject,它是因此我不可能统一对待我所有的课程).

我现在正在尝试使用基于原型的继承.

我必须有类DrawableMeshDrawable相应的包装器Wrapper_DrawableWrapper_MeshDrawable.MeshDrawable继承DrawableWrapper_MeshDrawable继承Wrapper_Drawable.

我让脚本引擎(m_scriptEngine)都知道这两个类:

Wrapper_Drawable* wrapper_drawable = new Wrapper_Drawable();
QScriptValue wrapper_drawable_obj = m_scriptEngine->newQObject(wrapper_drawable);
m_scriptEngine->setDefaultPrototype(qMetaTypeId<Wrapper_Drawable*>(),
                                    wrapper_drawable_obj);

Wrapper_MeshDrawable* wrapper_meshDrawable = new Wrapper_MeshDrawable();
QScriptValue wrapper_meshDrawable_obj = m_scriptEngine->newQObject(wrapper_meshDrawable);
m_scriptEngine->setDefaultPrototype(qMetaTypeId<Wrapper_MeshDrawable*>(),
                                    wrapper_meshDrawable_obj);
Run Code Online (Sandbox Code Playgroud)

如果我没有弄错,那么doc说脚本引擎会将原型应用于Wrapper_Drawable类型的对象,Wrapper_MeshDrawable因为它们在C++中具有继承关系.

我有一个方法Wrapper_Drawable::drawables(),它返回一个Wrapper_Drawable(实际上是包含在其中的Drawable的子节点Wrapper_Drawable)的所有子节点.作为Drawable一个抽象类,所有孩子实际上都是MeshDrawables.

因为我希望用户"相信"他使用Drawables而不是Wrapper_Drawables,我已经声明:

m_scriptEngine->globalObject().setProperty("Drawable", wrapper_drawable_obj);
Run Code Online (Sandbox Code Playgroud)

上面声明了wrapper_drawable_obj.


我想测试引擎是否识别Wrapper_MeshDrawables,即使它们是在一个Wrapper_Drawables 数组中声明的.

curChildren = myDrawable.drawables()[0];
print(curChildren instanceof …
Run Code Online (Sandbox Code Playgroud)

c++ qt ecma262 qtscript

26
推荐指数
1
解决办法
1349
查看次数

JavaScript中的激活和变量对象?

术语"激活对象"只是"变量对象"的另一个名称,还是它们之间实际上有什么区别?我一直在阅读一些关于如何在执行上下文中形成变量作用域的JavaScript文章,从我的观点来看,似乎在大多数文章中他们可以互换地使用这两个术语.

javascript ecma262

25
推荐指数
2
解决办法
5303
查看次数

JavaScript类型

按照http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf,JavaScript有6种:undefined,null,boolean,string,numberobject.

var und;
console.log(typeof und); // <-- undefined

var n = null;
console.log(typeof n); // <--- **object**!

var b = true;
console.log(typeof b); // <-- boolean

var str = "myString"
console.log(typeof str); // <-- string

var int = 10;
console.log(typeof int); // <-- number

var obj = {}
console.log(typeof obj); // <-- object
Run Code Online (Sandbox Code Playgroud)

问题1:

为什么类型为null object而不是null

问题2:

功能怎么样?

var f = function() {}; …
Run Code Online (Sandbox Code Playgroud)

javascript ecma262

24
推荐指数
2
解决办法
731
查看次数

JavaScript中的间接函数调用

有类似的东西

f.call(...)
f.apply(...)
Run Code Online (Sandbox Code Playgroud)

但那就是这个

(1, alert)('Zomg what is this????!!!11')
Run Code Online (Sandbox Code Playgroud)

在这种情况下,"1"似乎没有多大意义,以下工作正常:

(null, alert)('Zomg what is this????!!!11')
(1, null, alert)('Zomg what is this????!!!11')
(undefined, alert)('Zomg what is this????!!!11')
Run Code Online (Sandbox Code Playgroud)

你能指出一下描述语法的ECMAScript的特定部分吗?

javascript ecma262

24
推荐指数
2
解决办法
3685
查看次数

在严格模式下获取未知环境中的全局对象的引用

在未知主机环境中以ES5严格模式获取全局对象句柄的推荐方法是什么?

ECMAScript没有提供引用我所知道的全局对象的内置方法.如果是这样,这就是我正在寻找的答案.

已知环境中,全局对象通常具有自引用属性.由于全局对象是全局范围的VO,因此全局对象的属性是全局变量,因此我们可以使用它们从任何位置获取全局对象的句柄:

  • 在Web浏览器中,我们可以使用windowself.

  • 在node.js中,我们可以使用global.

但是,并非所有主机环境都是如此.据我所知,Windows Script Host不提供任何访问全局对象的方法.在WSH中获取全局对象的推荐方法似乎是this在不解析为对象的上下文中使用该关键字.例如:

var GLOBAL = (function(){return this}());
Run Code Online (Sandbox Code Playgroud)

此技术适用于任何主机环境,但不适用于严格模式,因为undefined 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);
}());
Run Code Online (Sandbox Code Playgroud)

那么,无论严格模式如何,在任何环境中获取全局对象句柄的正确方法是什么?

顺便说一句,我目前的方法是嗅探引用全局对象的全局变量,如下所示:

var self, window, global = global || window || self;
Run Code Online (Sandbox Code Playgroud)

......然后才使用global.我认为这是一个糟糕的解决方案,原因有很多,其中大多数是相当明显的,并没有解决WSH问题.

javascript global ecma262 ecmascript-5 strict-mode

22
推荐指数
2
解决办法
6217
查看次数

为什么"dtoa.c"包含这么多代码?

我将是第一个承认我对低级编程的整体知识有点稀疏的人.我理解许多核心概念,但我不会定期使用它们.话虽如此,我对dtoa.c需要多少代码感到非常震惊.

在过去的几个月里,我一直在使用C#进行ECMAScript实现,而且我一直在减慢填充引擎中的漏洞.昨晚我开始研究Number.prototype.toString,它在ECMAScript规范(pdf)的15.7.4.2节中描述.在第9.8.1节中,注3提供了到dtoa.c的链接,但我正在寻找挑战,所以我等待查看它.以下是我提出的建议.

private IDynamic ToString(Engine engine, Args args)
{
    var thisBinding = engine.Context.ThisBinding;
    if (!(thisBinding is NumberObject) && !(thisBinding is NumberPrimitive))
    {
        throw RuntimeError.TypeError("The current 'this' must be a number or a number object.");
    }

    var num = thisBinding.ToNumberPrimitive();

    if (double.IsNaN(num))
    {
        return new StringPrimitive("NaN");
    }
    else if (double.IsPositiveInfinity(num))
    {
        return new StringPrimitive("Infinity");
    }
    else if (double.IsNegativeInfinity(num))
    {
        return new StringPrimitive("-Infinity");
    }

    var radix = !args[0].IsUndefined ? args[0].ToNumberPrimitive().Value …
Run Code Online (Sandbox Code Playgroud)

javascript c c# floating-point ecma262

19
推荐指数
3
解决办法
1万
查看次数