这两天一直在研究这个问题,网上搜索到的基本都是这样:
1 | <script type="text/javascript"> |
但是这种测试方法会存在如下问题:
1 | <script type="text/javascirpt"> |
有如下3个原因:
- 变量定义但是没有赋值,用typeof返回undefined
- 变量没有定义直接typeof,返回undefined,可能会报错
- 变量定义且赋值为undefined,typeof依然会返回undefined
看了阮一峰老师的博客,发现还有一种好的方法,全局变量可以算是顶层window的对象,所以可以用如下方法进行判断:
1 | <script type="text/javascript"> |
这种方式的缺点在于,在某些环境(如V8、Rhino)中,window未必是顶层对象,阮老师又提出了一种方法:
1 | <script type="text/javascript"> |
在全局的变量层面中,this关键字总是指向顶层变量,所以这种方式可以独立于不同的运行环境。
但是,这种方式可读性较差,而且this的指向是可变的,容易出错,所以可以进一步改写:
1 | var global=this; |
这几种方法依然解决不了上面的3个问题,持续关注中,若大家有什么好的想法,欢迎交流。