我想在脚本中签入某个其他模块是否已加载。
if (ModuleName) {
// extend this module
}
但是,如果ModuleName
不存在,那就是throw
。
如果我知道那Global Object
是什么,我可以使用它。
if (window.ModuleName) {
// extend this module
}
但是,因为我希望我的模块与浏览器和工作node
,rhino
等等,我不能假设window
。
据我了解,这在ES 5 with中不起作用"use strict"
;
var MyGLOBAL = (function () {return this;}()); // MyGlobal becomes null
这也会因抛出异常而失败
var MyGLOBAL = window || GLOBAL
所以好像我已经离开了
try {
// Extend ModuleName
}
catch(ignore) {
}
这些情况都不会通过JSLint。
我有什么想念的吗?
好吧,您可以使用typeof
运算符,并且如果标识符在范围链的任何位置都不存在,则 不会
抛出ReferenceError
,而只会返回"undefined"
:
if (typeof ModuleName != 'undefined') {
//...
}
还要记住,this
全局代码中的值是指全局对象,这意味着如果您的if
声明位于全局上下文中,则只需检查即可this.ModuleName
。
关于这项(function () { return this; }());
技术,您是对的,在严格模式下,this
值将仅为undefined
。
在严格模式下,无论您身在何处,都有两种方法可以获取对Global对象的引用:
Function
构造函数:var global = Function('return this')();
用Function
构造函数创建的函数不会继承调用者的严格性,只有在以'usestrict'
指令开头的函数体中它们才是严格的,否则它们是非严格的。
此方法与任何ES3实现兼容。
eval
调用,例如:"use strict";
var get = eval;
var global = get(“this”);
上面的方法之所以有效,是因为在ES5中,对的间接调用eval
将全局环境用作评估代码的变量环境和词法环境。
查看有关输入评估码(步骤1)的详细信息。
但是请注意,最后一种解决方案不适用于ES3实现,因为对ES3的间接调用eval
会将调用者的变量和词法环境用作eval代码本身的环境。
最后,您可能会发现检测是否支持严格模式很有用:
var isStrictSupported = (function () { "use strict"; return !this; })();
问题内容: 我想将内容放入javascript全局定义的变量中,我使用ajax call获得的内容。 http://pastebin.com/TqiJx3PA 感谢您的任何建议 问题答案: pastebin代码已经做到了。我猜您实际上面临的问题是存在的,因为您的ajax调用是 异步的 ,这意味着您正在(异步)发出ajax请求,并立即尝试访问全局变量中的值-但它尚未尚未设定。 解决方案是在回调中执行
问题内容: 我想知道是否有人可以建议:我有一种情况,即Quartz运行的计划作业将每小时更新对象的数组列表。 但是我需要此对象数组列表对Tomcat创建的所有会话可见。所以我在想,我每小时都会在运行的Quartz作业中的某个地方编写该对象,以便每个会话都可以访问它。 谁能说这可以最好地实现?我想知道从Quartz作业将对象写入servlet上下文吗?另一种选择是让每个会话从数据库表中填充对象的数组
本文向大家介绍如何在JavaScript中获取对象的值?,包括了如何在JavaScript中获取对象的值?的使用技巧和注意事项,需要的朋友参考一下 有一些方法,例如Object.values()来获取对象的值。但是,通过这些方法,找出值的过程很漫长。为了缓解这个,Underscore.js的JavaScript库已经提供了一种方法称为_.values() 。此方法不需要for循环即可执行值。这是执
问题内容: 如何在JavaScript中声明全局变量? 问题答案: 如果必须在生产代码中生成全局变量(应避免使用),请 始终 明确 声明它们: 虽然可以通过省略来定义全局变量(假设没有同名的局部变量),但这样做会生成 隐式 全局,这是一件不好的事情,并且在 严格模式下 会产生错误。
本文向大家介绍JavaScript中的全局对象介绍,包括了JavaScript中的全局对象介绍的使用技巧和注意事项,需要的朋友参考一下 对于任何JavaScript程序,当程序开始运行时,JavaScript解释器都会初始化一个全局对象以供程序使用。这个JavaScript自身提供的全局对象的功能包括: 1.全局对象拥有一些常用的属性值。比如undefined、Infinity以及NaN。 2.全
问题内容: 我用Java制作了一个简单的媒体播放器,但是我 想记录诸如+的全局按键,以暂停/恢复当前正在播放的音乐, 而JFrame没有聚焦, 但是由于JVM安全问题,似乎无法实现。 我遇到了JNativeHook,但是我只想为Windows实现我自己的方法。请建议如何做以及从哪里开始? 问题答案: Jintellitype是一个比较简单的解决方案。 https://code.google.com