Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 区分已声明变量和未声明变量的方法_Javascript - Fatal编程技术网

Javascript 区分已声明变量和未声明变量的方法

Javascript 区分已声明变量和未声明变量的方法,javascript,Javascript,我有个问题。 我将只声明一个满足条件的变量 if(//some condition1) var some1=1; else if(//some condition1) var some2=2; 现在 如果满足两个条件,则可以在some3中求和 如果只满足一个条件,我希望在some3 我怎样才能做到这一点 注意:感谢您的回答,但我只想在满足该条件的情况下声明变量。 还有其他解决办法吗 var some3=0; if(//some condition1){ var some1=1; so

我有个问题。 我将只声明一个满足条件的变量

if(//some condition1)
var some1=1;
else if(//some condition1)
var some2=2;
现在

如果满足两个条件,则可以在
some3中求和

如果只满足一个条件,我希望在
some3

我怎样才能做到这一点

注意:感谢您的回答,但我只想在满足该条件的情况下声明变量。 还有其他解决办法吗

var some3=0;

if(//some condition1){
  var some1=1;
  some3 += some1;
}else if(some condition2){
  var some2=2;
  some3 += some2;
}
编辑:更好的选择:

而且这两个条件不会同时满足,所以,如果你想,你也可以像下面这样做

var some3=0;           
if(some condition1){
   some3 += 1;
}
if(some condition2){
   some3 += 2;
}

首先将两个变量初始化为0

var some1 = 0, some2 = 0;
if (condition1) {
    some1 = 1;
}
if (condition2) {
    some2 = 2;
}
var some3 = some1 + some2;

由于您希望同时满足这两个条件并设置这两个变量,因此如果
,则不应使用
else。只有两个独立的
if
语句。

为什么不先声明变量,然后在满足条件时设置它们的值呢

var some1 = 0;
var some2 = 0;

if (//some condition)
{
  some1 = 1;
}
if (// some condition)
{
  some2 = 2;
}

var some3 = some1 + some2;

声明begin中的所有变量。将它们初始化为0。如果满足条件,则更改变量值。然后,在求和时,任何值加0都保持不变。或者,如果满足条件,则该值不会为0。

对象如何:

if(//some condition1) {
    var some1 = 1;
} else if(//some condition1) {
    var some2 = 2;
}

var some3 = 0;

if(some1 !== undefined) {
    some3 += some1;
}
if(some2 !== undefined) {
    some3 += some2;
}
var obj = {};
if(//conditon){
   obj.some1 = 1;
}
else if(//condition){
   obj.some2 = 1;
}

var sum3 = 0;
for(var key in obj){
    sum3 += obj[key];
}

首先,不能仅在满足某个条件时才声明变量。JavaScript具有函数作用域,这意味着无论您在代码中的什么位置编写
var some1
,它都会被提升到函数作用域的顶部:

function A() {
   if (...) {
       var a = 1;
   }
}
将被解释为:

function A() {
   var a;
   if (...) {
       a = 1;
   }
}
话虽如此。我认为要解决您的问题,您只需要使用0初始化变量:

var some1 = 0,
    some2 = 0,
    some3;

if(//some condition1)
    some1 = 1;
else if(//some condition1)
    some2 = 2;

some3 = some1 + some2;
编辑

实际上,有一种方法可以仅在满足条件时声明变量:

if (...) {
    eval("var x = 1;");
}

但是我真的不认为有必要使用这样的“黑客”,也不建议使用这种方法。

如果需要使用这种模型,可以使用第四个变量

var some0 = 0
if(/*some condition1*/) {
var some1=1;
some0 = some1 + some3
}
else if(/*some condition1*/) {
var some2=2;
some0 = some2 + some3
}
some3=some0
状况良好

if(some1 != null && some2 != null )
  some3=some1+some2;
else if(some1 != null && some2 == null)
  some3=some1;
else if(some1 == null && some2 != null)
  some3=some2;
else if(some1 == null && some2 == null)
  some3=some3;
然后

那么:

var some3 =
(2 > 4      ? 10:0) +
(5 < 8      ? 20:0) +
(10 == 11   ? 30:0) +
('a' < 'b'  ? 40:0) ;
var some3=
(2 > 4      ? 10:0) +
(5 < 8      ? 20:0) +
(10 == 11   ? 30:0) +
(‘a’<‘b’?40:0);
我承认这看起来不太好看。

你可以使用

如果(//some condition1)var some1=1

如果(//some condition1)var some2=2

然后尝试像我的


为什么不先声明变量,然后在满足conditions@Loney检查if(var==undefined)条件,然后添加only definedone@captain你的意思是
if(typeof var==“未定义”)
?当条件不满足时声明变量有什么害处?请记住,由于Javascript提升变量声明的方式,即使条件不满足,
语句中的声明也会被提升到函数中。@Deepenshu问题说,只有当条件为trueGood逻辑时才应该声明变量,但是您正在声明您的变量。还可以改进格式设置bit@Deepanshu请检查这个问题。它说只在满足那个条件时声明变量,不需要在这里声明some1和some2。你可以直接将它添加到some3中。我认为OP的意思是
定义的
未定义的
,而不是
声明的
未声明的
。具有
var-some3我声明了变量,但它仍然未定义。声明变量(即使在if中)将在整个函数范围内局部声明它。对我来说,这似乎是正确的答案。只有一个建议,使用与
null
的比较,或者使用
typeofsome1===“undefined”
,因为与
未定义的
进行比较并不完全安全为什么不完全安全?因为在较旧的环境中,可以覆盖
未定义的
的值,并将其更改为
true
,这将破坏很多东西。这将帮助人们摆脱过时的东西。(由于抛出异常的开销,异常的使用效率很低,但我只是在其他答案中提供了一个额外的选项。)更多关于在一个示例中尝试捕获的副作用的信息。为了回答这个问题,@jon-j创造了这个,证明了这一点。
var some3 = 0; //Assingning global var.
if(//some condition1)
  var some1=1;
else if(//some condition1)
  var some2=2;
if(some1 != null && some2 != null )
  some3=some1+some2;
else if(some1 != null && some2 == null)
  some3=some1;
else if(some1 == null && some2 != null)
  some3=some2;
else if(some1 == null && some2 == null)
  some3=some3;
alert(some3);
var some3 =
(2 > 4      ? 10:0) +
(5 < 8      ? 20:0) +
(10 == 11   ? 30:0) +
('a' < 'b'  ? 40:0) ;
try{

 var some3=some1+some2;

}
catch (e){
    try{
      var some3=some1;
      document.getElementById("test").innerHTML= some3;

    }catch (e){
        try{
           var some3=some2 ;
           document.getElementById("test").innerHTML= some3;

        }
        catch (e){
        document.getElementById("test").innerHTML="Something went wrong!!!!or no condition satisfied";
        }
    }
}