Javascript 检测变量是否为全局变量

Javascript 检测变量是否为全局变量,javascript,Javascript,有没有办法检测函数范围内是否全局定义了变量?浏览器环境中的全局对象始终是 if( typeof window.myvar != "undefined") { /* variable is global */ } else { /* variable is local */ } 窗口 . 所以你可以检查一下 窗口['yourprop'] 存在,以查看它是否为全局对象。您可以在中对全局对象使用 'myvar' in window 例如 alert( 'setTimeout' in window

有没有办法检测函数范围内是否全局定义了变量?

浏览器环境中的全局对象始终是
if( typeof window.myvar != "undefined") { /* variable is global */ }
else { /* variable is local */ }
窗口 . 所以你可以检查一下 窗口['yourprop']
存在,以查看它是否为全局对象。

您可以在中对全局对象使用

'myvar' in window
例如

alert( 'setTimeout' in window ); // true

像那样?

可能使用
window.variable===variable
?例如:

var a = 5;
var b = 5;

function tst()
{
    var a = 4;
    alert(a === window.a); // Returns false because 'a' is local
    alert(b === window.b); // Returns true because 'b' is global
}
您可以为window[varName]分配一些“唯一的”,然后测试实际值是否匹配:

varName = "myvar"
isGlobal = false
test = "some unique string"

savedValue = window[varName]
window[varName] = test

try {
    isGlobal = eval(varName + "==='" + test + "'")
} catch(e) {}

window[varName] = savedValue

isGlobal
将是
true
如果
myvar
是全局的且不在当前范围内。

这只会告诉您,如果存在与本地var同名的全局var,它不会告诉您正在处理的var是全局的。嗯。。。在这种情况下,最接近的方法是添加
&&window.myvar===myvar
,但如果它们恰好具有相同的值,您就会被卡住。我忘记了
中的
操作符可以这样使用。谢谢您,先生。如果函数中有
myvar
的阴影,那就没用了。@thg435:不知道为什么在哪里运行它会很重要,只要您有权访问全局对象。。。除非我误解了这个问题?我真的不明白,为什么需要引用var。。。但这是唯一的办法,它是怎么工作的@Christoph:in
操作符中的
允许您询问任何对象是否具有属性。如果我有一个对象
varx={foo:123}
,我可以询问
x
对象是否具有
'foo'
属性<代码>'foo'在x中;//true
因此第一个参数是字符串,因为所有属性最终都表示为字符串,因此我们询问对象是否有与该字符串匹配的属性。
.hasOwnProperty()
方法与此类似,传递字符串可能更为常见
x.hasOwnProperty('foo')
问得好。代码检查?:D@Christoph:没有其他方法可以回答这个问题。如果你是认真的,请退出编程@克里斯托夫:嘿,兄弟,星期一很辛苦,不是吗我讨厌星期一-别当真;)
varName = "myvar"
isGlobal = false
test = "some unique string"

savedValue = window[varName]
window[varName] = test

try {
    isGlobal = eval(varName + "==='" + test + "'")
} catch(e) {}

window[varName] = savedValue