首页 > 一道语法问题 - 判断参数是否为空?

一道语法问题 - 判断参数是否为空?

先放代码:

if (asdf) {}

如上代码,如果没有定义 asdf 参数时,会执行报错,但是下面的代码就不会报错,这是为什么?他们有什么区别?

if (window.asdf) {}

补充下1楼的答案:
在js中,有个东西叫执行上下文,执行上下文中有个东西叫变量对象,保存着函数的形参、函数声明和声明的变量。其中有个点就是var显示声明的变量在代码执行前被包含到变量对象中,并赋予undefined,执行代码才对其进行填充值。
问题中:

if (asdf) {}

报错,是因为变量对象找不到asdf,即未声明也未赋值。而

window.asdf

相当于 asdf = undefined;(因为能被delete,所以不是var asdf = undefined)
所以执行if的时候为false,未报错


js中,不存在的属性,其值为 undefined


使用var定义变量,即使用

var asdf = 124;

和使用

asdf = 124;
window.asdf = 124;

是不同的,第一个方法定义的asdf属性不能使用delete,而第二种则是可以使用delete删除掉的属性。(不过很遗憾,使用eval定义的变量(第一种方式),依然可以使用delete删除)

猜测:
两种写法实际上语义的确是完全不同的,第一种写法,定义的是一个变量,访问的也是变量;而第二种,则是定义和访问属性。

似乎并没有回答题主的问题……

【热门文章】
【热门文章】