没有参数的条件语句

时间:2019-07-10 05:02:31

标签: javascript

我试图学习JavaScript中的条件语句,当我调用函数时仍然不传递任何参数时,我得到的x等于y。我不知道我在哪里缺少代码。

function tryMe(x, y) {
  if (x == y) {
    console.log("x and y are equal");
  } else if (x > y) {
    console.log("x is greater than y");
  } else if (x < y) {
    console.log("x is less than y")
  } else {
    console.log("no values")
  }
}

tryMe();

这是我的控制台日志:

  

x和y等于// //我期望它为console.log(“ no values”)

7 个答案:

答案 0 :(得分:6)

因为undefined等于undefined

如果不传递参数,则xy都将变为未定义状态

为什么会发生这种情况-当您只声明一个变量时,它具有默认值undefined。在您的情况下也是如此,您的fn tryMe()声明为x,而y的默认值为undefined,当您比较它们时,两者相等。

console.log(undefined == undefined)

var x, y
// Here you declared the variable which happens in your function
if(x === y) {
  console.log('You never defined what value I have so Javascript engine put undefined by default')
}

答案 1 :(得分:5)

发生这种情况是因为,当您呼叫tryMe()时,xy都是undefined,这意味着它们是相等的。因此,您首先需要检查是否为xy分配了值。

function tryMe(x, y) {
  if (typeof(x) != 'undefined' && typeof(y) != 'undefined') {
    if (x == y) {
      console.log("x and y are equal");
    } else if (x > y) {
      console.log("x is greater than y");
    } else if (x < y) {
      console.log("x is less than y")
    } else {
      console.log("no values")
    }
  } else {
    console.log("no values")
  }
}

tryMe();
tryMe(1);
tryMe(1, 2);

答案 2 :(得分:3)

x = undefinedy= undefined中没有传递参数时

x == y // true

答案 3 :(得分:3)

如果您不向函数中传递任何参数xy并用undefinedundefined === undefined进行初始化,这就是为什么要获取{{1 }}

一种更好的方法是

x and y are equal

答案 4 :(得分:2)

由于您未在函数调用中传递任何 参数 ,因此函数 参数 xy均为undefined,因此它们相等:

function tryMe(x, y){
  console.log(x == y); // true
  if (x == y){
    console.log("x and y are equal");
  } else if(x > y){
    console.log("x is greater than y");
  } else if (x < y){
    console.log("x is less than y")
  } else {
    console.log("no values")
  }
}

tryMe();

答案 5 :(得分:2)

当需要参数时,您可能会抛出错误:

    const isRequired = () => {
      throw new Error('param is required'); 
    };
    function tryMe(x = isRequired() ,y = isRequired() ){
             if (x == y){
            console.log("x and y are equal");
        } else if(x > y){
            console.log("x is greater than y");
        } else if (x < y){
            console.log("x is less than y")
        } else {
            console.log("no values")
        }
    }
    tryMe(2,3);
    tryMe(2);
    tryMe();
它将使您的参数成为必需。
或者您可以执行以下操作:

    function tryMe(x ,y ){
        if(x == "" || x == undefined || y == "" || y == undefined){
          console.log("no values !");
        } else if (x == y){
            console.log("x and y are equal");
        } else if(x > y){
            console.log("x is greater than y");
        } else if (x < y){
            console.log("x is less than y")
        } else {
            console.log("no values")
        }
    }
    tryMe(2,3);
    tryMe(2);
    tryMe();

答案 6 :(得分:1)

xy最终都是undefined值,该值自然比较相等。