利用try-catch判断变量是已声明未声明还是未赋值


Posted in Javascript onMarch 12, 2014

目的是如果一个变量是已声明未赋值,就可以直接赋值;并且不能改变变量的作用域

如果未声明的话,就重新声明,

在网上搜了下,常见的方法是if(typeof(a)=='undefined'){var a='ss';},

但是这种方法对未声明或已声明未赋值的变量都会返回true。而且如果是这样:

var a; 
function f(){ 
if(typeof(a)=='undefined') 
{var a=1;} 
} 
f(); 
console.log(a);

会显示undefined,因为f()里面只是声明了一个同名的局部变量。

但是如果是已声明未赋值的变量:if(noValueV==null),会返回true;

未声明的变量:if(noDeclareV==null),会报错。

所以可以这样:

function f( ){ 
if(typeof(v)=='undefined'){ 
try{ 
if(v==null)//说明v是已声明未赋值 
v=1; //如果v是全局变量,这样不会改变它的作用域 
} 
catch(err){//说明v是未声明 
var v;v=2; 
} 
} 
console.log(v); 
} 
f( );

这样也是不对的,因为js有‘声明提前'的特性,即函数内声明的变量在这个函数里和这个函数的子函数里都是可见的,不管它具体是在函数内的哪个位置声明的。

所以由于上面里的var v;导致不管哪种情况都是只走try。

修改一下:

function f( ){ 
if(typeof(v)=='undefined'){ 
try{ 
if(v==null)//说明v是已声明未赋值 
v=1; //如果v是全局变量,这样不会改变它的作用域 
} 
catch(err){//说明v是未声明 
eval('var v');v=2; //这里不一样 
} 
} 
console.log(v); 
} 
f( );

这样就可以了。

写成一个判断函数,返回'noDeclare'表示变量未声明,'noValue'表示变量已声明未赋值,'hasValue'表示变量已声明已赋值:

function f(v){ 
if(typeof(v)=='undefined'){ 
try{ 
if(v==null) 
return 'noValue'; 
} 
catch(err){ 
return 'noDeclare'; 
} 
} 
else return 'hasValue'; 
} 
var a; 
console.log(f(a)); 
a=0; 
console.log(f(a)); 
console.log(f(b));

又错了......console.log(f(b));时会报错......
Javascript 相关文章推荐
javascript 动态添加表格行
Jun 22 Javascript
可简单避免的三个JS发布错误的详细介绍
Aug 02 Javascript
Jquery Validate 正则表达式实用验证代码大全
Aug 23 Javascript
js形成页面的一种遮罩效果实例代码
Jan 04 Javascript
AngularJs 最新验证手机号码的实例,成功测试通过
Nov 26 Javascript
js点击时关闭该范围下拉菜单之外的菜单方法
Jan 11 Javascript
jQuery模拟12306城市选择框功能简单实现方法示例
Aug 13 jQuery
微信小程序实现的动态设置导航栏标题功能示例
Jan 31 Javascript
ES6知识点整理之函数对象参数默认值及其解构应用示例
Apr 17 Javascript
解决Layui当中的导航条动态添加后渲染失败的问题
Sep 25 Javascript
javscript 数组扁平化的实现
Feb 03 Javascript
小程序wx.getUserProfile接口的具体使用
Jun 02 Javascript
jquery原创弹出层折叠效果点击折叠弹出一个层
Mar 12 #Javascript
jq实现酷炫的鼠标经过图片翻滚效果
Mar 12 #Javascript
jquery、js操作checkbox全选反选
Mar 12 #Javascript
网站繁简切换的JS遇到页面卡死的解决方法
Mar 12 #Javascript
seajs中模块的解析规则详解和模块使用总结
Mar 12 #Javascript
判断一个对象是否为jquery对象的方法
Mar 12 #Javascript
Jquery实现自定义窗口随意的拖拽
Mar 12 #Javascript
You might like
PHP实现格式化文件数据大小显示的方法
2015/01/03 PHP
smarty自定义函数htmlcheckboxes用法实例
2015/01/22 PHP
php和editplus正则表达式去除空白行
2015/04/17 PHP
解决laravel(5.5)访问public报错的问题
2019/10/12 PHP
javascript flash下fromCharCode和charCodeAt方法使用说明
2008/01/12 Javascript
javascript 操作Word和Excel的实现代码
2009/10/26 Javascript
javascript onmouseout 解决办法
2010/07/17 Javascript
鼠标事件延时切换插件
2011/03/12 Javascript
jquery图片上下tab切换效果
2011/03/18 Javascript
jQuery图片预加载 等比缩放实现代码
2011/10/04 Javascript
javascript nextSibling 与 getNextElement(node) 使用介绍
2011/10/13 Javascript
js 对小数加法精度处理示例说明
2013/12/27 Javascript
JS实现文字掉落效果的方法
2015/05/06 Javascript
详解Vue取消eslint语法限制
2018/08/04 Javascript
Vue2.0实现组件之间数据交互和通信操作示例
2019/05/16 Javascript
用jQuery实现抽奖程序
2020/04/12 jQuery
浅谈webpack构建工具配置和常用插件总结
2020/05/11 Javascript
Python中optionParser模块的使用方法实例教程
2014/08/29 Python
安装dbus-python的简要教程
2015/05/05 Python
python实现井字棋游戏
2020/03/30 Python
浅谈pandas中DataFrame关于显示值省略的解决方法
2018/04/08 Python
Python3使用turtle绘制超立方体图形示例
2018/06/19 Python
Django压缩静态文件的实现方法详析
2018/08/26 Python
Django框架序列化与反序列化操作详解
2019/11/01 Python
Selenium自动化测试工具使用方法汇总
2020/06/12 Python
keras 自定义loss层+接受输入实例
2020/06/28 Python
Python实现JS解密并爬取某音漫客网站
2020/10/23 Python
Python调用飞书发送消息的示例
2020/11/10 Python
Clarks鞋美国官网:全球领军鞋履品牌
2017/05/13 全球购物
租租车:国际租车、美国租车、欧洲租车、特价预订国外租车(中文服务)
2018/03/28 全球购物
英文求职信写作小建议
2014/02/16 职场文书
电子商务助理求职自荐信
2014/04/10 职场文书
经管应届生求职信范文
2014/05/18 职场文书
校园安全广播稿范文
2014/09/25 职场文书
党员自我评议对照检查材料
2014/09/27 职场文书
王亚平太空授课观后感
2015/06/12 职场文书