ECMAScript和JavaScript有什么区别?根据我的推断,ECMAScript是标准,JavaScript是实现.它是否正确?
为什么arguments.callee.caller
在JavaScript中弃用了该属性?
它已添加,然后在JavaScript中弃用,但ECMAScript完全省略了它.某些浏览器(Mozilla,IE)一直支持它,并且在地图上没有任何计划来删除支持.其他人(Safari,Opera)已经采用了它的支持,但对旧浏览器的支持是不可靠的.
是否有充分理由将这些有价值的功能置于不确定状态?
(或者,有没有更好的方法来获取调用函数的句柄?)
我试图搜索JavaScript引用,但没有可用的.最好的两个建议来源是MDN(Mozilla开发者网络)和W3Schools.
为什么?
我在MDC或ECMAscript规范中没有找到关于我的问题的任何内容.可能有人知道一种更"笨拙"的方法来解决这个问题.
我正在调用"use strict"
我环境中的每个javascript文件.我的所有文件都是这样开始的
(function(win, doc, undef) {
"use strict";
// code & functions
}(window, window.document));
Run Code Online (Sandbox Code Playgroud)
现在,我有一个处理错误的自定义函数.该函数使用该.caller
属性来提供上下文堆栈跟踪.看起来像这样:
var chain = (function() {
var _parent = _error,
_ret = '';
while( _parent.caller ) {
_ret += ' -> ' + _parent.caller.name;
_parent = _parent.caller;
}
return _ret;
}());
Run Code Online (Sandbox Code Playgroud)
但是,当然,在严格模式下.caller
是一个不可删除的道具,在检索时抛出.所以我的问题是,是否有人知道如何禁用更严格的"功能明智"?
"use strict";
在被调用之后被所有函数继承.现在我们有可能在特定函数中使用严格模式,只需调用它们"use strict";
的顶部,但有没有办法实现相反的目的?
无论如何都要检查是否强制执行严格模式'use strict',并且我们想要为严格模式执行不同的代码,而为非严格模式执行其他代码.寻找像这样的功能isStrictMode();//boolean
有人可以告诉我,哪个ECMA版本的IN运算符可用以及哪些浏览器(版本)支持它?
说明:
IN运算符可以像下面这样使用:
var myObject = {
Firstname: 'Foo',
Lastname: 'Bar'
};
if('Lastname' in myObject){
// Lastname is an attribute of myObject
}
Run Code Online (Sandbox Code Playgroud) 我的一位朋友提请我注意第四届欧洲Lisp研讨会的欢迎辞:
...任何Lisp方言的实现和应用,包括Common Lisp,Scheme,Emacs Lisp,AutoLisp,ISLISP,Dylan,Clojure,ACL2,ECMAScript,......
然后询问ECMAScript是否真的是Lisp的方言.真的可以这样考虑吗?为什么?
是否有明确定义的明确标准来帮助我们检测语言是否是Lisp的方言?或者是一种非常松散的方言(在这种情况下,我们可以将Python,Perl,Haskell等添加到Lisp方言列表中吗?)
严格模式编译指示在ECMAScript5中有什么范围?
"use strict";
Run Code Online (Sandbox Code Playgroud)
我想这样做(主要是因为JSLint没有抱怨它):
"use strict";
(function () {
// my stuff here...
}());
Run Code Online (Sandbox Code Playgroud)
但我不确定这是否会破坏其他代码.我知道我可以做到这一点,这将把pragma的范围扩展到函数...
(function () {
"use strict";
// my stuff here...
}());
Run Code Online (Sandbox Code Playgroud)
但JSLint抱怨它(当启用"严格"JSLint选项时),因为它认为您在启用"use strict"之前正在执行代码.
这是我的问题.如果我有fileA.js:
"use strict";
// do some stuff
Run Code Online (Sandbox Code Playgroud)
和fileB.js:
eval( somecodesnippet ); // disallowed by "use strict"
Run Code Online (Sandbox Code Playgroud)
然后将它们以相同的顺序包含在我的html页面中,将pragma限定为文件,还是将pragma放到fileB中,从而阻止eval执行?
JavaScript并不关心你的字符串是双引号"double"
还是单引号'single'
.
ECMAScript 5的严格模式的每个示例都"use strict"
使用双引号启用它.我可以执行以下操作(单引号):
alert(function(){
'use strict';
return !this;
}());
Run Code Online (Sandbox Code Playgroud)
如果启用了Strict模式,则返回true,否则返回false.
ecma262 ×10
javascript ×10
ecmascript-5 ×4
strict ×2
strict-mode ×2
json ×1
lisp ×1
reference ×1
scope ×1