Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.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 为什么if(x)与if(window.x)不同?_Javascript_Global Variables - Fatal编程技术网

Javascript 为什么if(x)与if(window.x)不同?

Javascript 为什么if(x)与if(window.x)不同?,javascript,global-variables,Javascript,Global Variables,为什么会这样: if(x) alert('Available'); 给出:ReferenceError:x未定义 虽然这样做有效: if(window.x) alert('Available'); 不是说: var x = ""; 相当于: x = ""; window.x = ""; 相当于: x = ""; window.x = ""; 只要外部一个函数,整个代码就被一个包围,带有(窗口) 更清楚地说:我确实知道全局变量和成员变量之间的区别,但我想知道为什么检索未声

为什么会这样:

if(x)
  alert('Available');
给出:
ReferenceError:x未定义

虽然这样做有效:

if(window.x)
   alert('Available');
不是说:

var x = "";
相当于:

x = "";
window.x = "";
相当于:

x = "";
window.x = "";
只要外部一个函数,整个代码就被一个
包围,带有(窗口)




更清楚地说:我确实知道全局变量和成员变量之间的区别,但我想知道为什么检索未声明的变量会产生引用错误,如
x
window.x
给出未定义的?它们不都应该给出undefined吗?

window.x“起作用”的原因(但它不应该满足
if
条件)是因为在访问对象的不存在属性时,返回undefined,而不是异常。直接访问变量的情况正好相反。这很可能是因为如果在定义变量之前就访问了它,那么程序就有可能有一个不应该被忽略的bug


另外,
var
定义了一个只能在封闭范围内访问的变量。省略关键字会导致创建全局变量。

x
可以是三种不同的内容,可以是全局变量、局部变量或
窗口中的属性

如果
var x=“”用于任何函数之外,它将是一个全局变量。如果
x=”“
用于尚未定义的
x
的任何位置,它将是一个全局变量

如果
var x=“”用于函数内部,它将是局部变量

使用
window.x=“”将在
窗口中创建一个属性
对象


获取未定义的变量值是一个错误。获取未定义属性的值不是错误,返回的值
未定义

var
在函数内部和外部是不同的,访问属性永远不会抛出引用错误,只会尝试使用范围之外(或在[global]对象上未定义)的裸标识符两者都不会发出任何警报,但未定义的属性访问不会引发引用错误。
var
函数外部被视为全局变量,因为它被分配给
窗口
。请从
中注意,当在严格模式代码中发生赋值时,其左侧不能计算为无法解析的引用。如果没有,则在赋值时抛出ReferenceError异常。
x=“”如果未初始化
x
在严格模式下是非法的,“全局变量”和“窗口中的属性[global]对象”之间有什么区别?谢谢。我的问题是在函数之外提到,其中
var x=“”,与
x=”“相同。但是前面的两条语句不会在
窗口中创建变量吗?@user2864740:区别只在于如何创建它。全局变量作为
窗口
对象的属性可用,反之亦然。@user3439065:对不起,我错过了关于窗口外部的部分,无论如何,我想介绍变量的任何可能用法。是的,变量成为
窗口中的属性。这很有意义。(anythingNotIn_窗口的类型==“未定义”)。While(!!anythingNotIn_window)是一个引用错误,而(!!window.anythingNotIn_window)给出false。非常感谢!:)@user3439065如果不能假设truthy,我更喜欢使用
if(bar中的“foo”){/*exists*/}
。。不要介意继承