Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript-如何识别或定义;“全球”;(超全局)用于严格模式下的跨平台使用 全球参考_Javascript_Node.js_Browser_Cross Platform - Fatal编程技术网

JavaScript-如何识别或定义;“全球”;(超全局)用于严格模式下的跨平台使用 全球参考

JavaScript-如何识别或定义;“全球”;(超全局)用于严格模式下的跨平台使用 全球参考,javascript,node.js,browser,cross-platform,Javascript,Node.js,Browser,Cross Platform,我正在寻找一种方法来检查“全局”(超全局,类似于“窗口”)是否存在,如果不存在,就创建它 几周前,我在GitHub上的一些代码中看到了这一点,但是,现在我需要它,我在任何地方都找不到它。我可能看不到,但它非常短,非常智能,就像在1(短)行上一样-没有if,也没有使用var(或let)-在全局范围内-->在严格模式下 我已经搜索了2个小时试图找到这个,我所能找到的是无数对“全局变量”的引用-在这种情况下,显然不是一个“变量”,因为超级全局“窗口”(或在NodeJS“全局”)是不可变的 我目前拥有的

我正在寻找一种方法来检查“全局”(超全局,类似于“窗口”)是否存在,如果不存在,就创建它

几周前,我在GitHub上的一些代码中看到了这一点,但是,现在我需要它,我在任何地方都找不到它。我可能看不到,但它非常短,非常智能,就像在1(短)行上一样-没有
if
,也没有使用
var
(或
let
)-在全局范围内-->在严格模式下

我已经搜索了2个小时试图找到这个,我所能找到的是无数对“全局变量”的引用-在这种情况下,显然不是一个“变量”,因为超级全局“窗口”(或在NodeJS“全局”)是不可变的

我目前拥有的解决方案不是很好,但它可以工作,有点:

"use strict";

if ('undefined' == typeof global)
{
    Object.defineProperty
    (
        window,'global',
        {
            writable:false,
            configurable:false,
            enumerable:false,
            value:window
        }
    );
}
因此,如果您尝试以下方法:

global = 'bite me!';
console.log(global);
然后,行为如预期的那样,抛出:

未捕获类型错误:无法分配给…的只读属性“全局”

这很好,-就像它应该表现的那样。

我不确定这是否是定义它的正确方法,因为如果我这样做:

global = 'bite me!';
console.log(global);
然后控制台显示如下内容:

窗口{顶部:窗口,…

这告诉我,它不是“全球”而是“窗口”——这是一个“循环”,是公平和幸福的。然而,我相信有更好的方法来做到这一点


任何意见都将不胜感激,谢谢

我从未想过这会真正起作用;但它确实起作用了!
在全局范围内,在
使用strict;
之后,您只需执行以下操作:

this.Main = this;
现在,您可以像使用
window
-或-
global
一样,在
Main
上简单地调用和定义事物;这些新属性将如预期的那样存在于全局范围中

对该对象进行更改后,只需调用:

Object.freeze(this.Main);  // makes it immutable

如果您想一次完成所有工作(无任何正当理由),您可以这样做:

Object.freeze(this.Main=this);  // it actually works!

我从来没有想过这会真正起作用;但它确实起作用了!
在全局范围内,在
使用strict;
之后,您只需执行以下操作:

this.Main = this;
现在,您可以像使用
window
-或-
global
一样,在
Main
上简单地调用和定义事物;这些新属性将如预期的那样存在于全局范围中

对该对象进行更改后,只需调用:

Object.freeze(this.Main);  // makes it immutable

如果您想一次完成所有工作(无任何正当理由),您可以这样做:

Object.freeze(this.Main=this);  // it actually works!

window=window | | global |{some:new_object}
@adeneo::在浏览器中,“window”已经存在,因此,在这种情况下,它将保持“window”,而“global”将不会被定义;相反,它将抛出,因为“global”没有定义。此外,如果在“严格模式”下这样做,如果“window”出现错误,它将抛出一个错误没有定义,就像在NodeJS中使用一样;)好吧,你不能覆盖全局,如果它存在,它应该是它已经存在的样子,不是吗?把var放在第一位?
var window=window | global | |{some:new_object}
这在技术上是重新定义的,但应该可以工作。另一种方法是只检查运行时
var global=typeof module!='undefined'&&module.exports?global:typeof window!==undefined?window:{some:'other_object'};
window=window | global |{some:new| object}
@adeeo::在浏览器中,“窗口”已经存在,因此,在本例中,它将保持为“窗口”-“全局”将不被定义;但是,它将抛出,因为“全局”未定义。此外,如果在“严格模式”中以这种方式执行,则如果“窗口”将抛出错误“没有定义,就像在NodeJS中使用一样;)好吧,你不能覆盖全局,如果它存在,它应该是它已经存在的样子,不是吗?把var放在第一位?
var window=window | global | |{some:new_object}
这在技术上需要重新定义,但应该可以工作。另一种方法是只检查运行时
var global=typeof module!='undefined'&&module.exports?global:typeof window!==undefined?window:{some:'other_object'};