时间:2021-05-25
目的是如果一个变量是已声明未赋值,就可以直接赋值;并且不能改变变量的作用域
如果未声明的话,就重新声明,
在网上搜了下,常见的方法是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));时会报错......
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
1、以下值用empty()被判断为true:未赋值变量、未声明变量、0、"0"、""、false、null、空数组array()、对象的魔术方法__get()返
一:js支持Unicode字符集,所以可以用中文命名函数。二:js在Var中没有初始化的变量,默认为undefined三:对于未声明也未赋值的变量,如果直接使用
当声明一个变量未赋值一个变量没有声明的时候都是undefined类型的数据js变量在使用之前也必须先进行声明使用了一个未定义的变量x就会报错。如何判断一个变量是
关于window下自带name的属性不知道大家有没有发现这样一种情况在控制台里直接输出未声明变量,正常情况应该是会报错的,而且声明未赋值的变量输出应该是unde
1、try-catch语句ECMA-262第3版引入了try-catch语句,作为JavaScript中处理异常的一种标准方式。语法:try{//可能会导致错误