当前位置: 首页 > 面试题库 >

如何在JavaScript中获取全局对象?

谷星文
2023-03-14
问题内容

我想在脚本中签入某个其他模块是否已加载。

if (ModuleName) {
    // extend this module
}

但是,如果ModuleName不存在,那就是throw

如果我知道那Global Object是什么,我可以使用它。

if (window.ModuleName) {
    // extend this module
}

但是,因为我希望我的模块与浏览器和工作noderhino等等,我不能假设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