javascript - 一道语法问题 - 判断参数是否为空?
伊谢尔伦
伊谢尔伦 2017-04-10 15:43:34
[JavaScript讨论组]

先放代码:

if (asdf) {}

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

if (window.asdf) {}
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(3)
怪我咯
  • 第一个 asdf是一个未声明的变量

  • 第二个 window.asdfasdfwindows对象的属性,其值为undefined

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

天蓬老师

使用var定义变量,即使用

var asdf = 124;

和使用

asdf = 124;
window.asdf = 124;

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

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

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

黄舟

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

if (asdf) {}

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

window.asdf

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号