我可以在 if 语句中比较函数参数吗?

Can I compare function parameters within my if statement?

代码如下:

function howdy_doody(person) {
  let person = 'dog'
  if (person == { name: 'dog' }) {
    return 'hello'
  } else {
    return 'goodbye'
  }
}
howdy_doody({ name: 'dog' }); 

我期待输出 hello。我已经尝试声明 person 参数(请参见下面的代码)但获取标识符 person has already been declared 语法错误。我对是否可以在 if 语句中比较函数参数感到困惑。

谢谢

你是这个意思?

function howdy_doody(person) {
  let compareValue = 'dog'
  if (compareValue == person.name) {
    return 'hello'
  } else {
    return 'goodbye'
  }
}

howdy_doody({ name: 'dog' });
function howdy_doody(person) {
  let person = 'dog' // <-- this line overwrites the input `person`; remove it
  if (person == { name: 'dog' }) { // <-- if (person.name === 'dog') {
    return 'hello'
  } else {
    return 'goodbye'
  }
}
howdy_doody({ name: 'dog' });  // <-- "hello" gets returned here, 
                               // but you're not assigning it to
                               // anything, or logging it, so there
                               // won't be a visible result

(...但是上面我假设你实际上是想检查 person 有一个值为 'dog' 的名称参数;如果你想检查 person 是正好等于对象{name:'dog'}多了一点complicated。)

对于 { name: 'dog' } 的精确匹配,例如利用 Object.entries ,对于任何给定的对象 returns 这个对象自己的 key-value 对/条目的数组。每个条目都作为 key-value 元组提供。

因此 entries 数组 length 的值应该是 exyctly 1 并且这个唯一元组的 key 必须等于 'name' 而值有等于 'dog'.

function isValidHowdyType(value) {
  const entries = Object.entries(value ?? {});
  return (
    entries.length === 1 &&
    entries[0][0] === 'name' &&
    entries[0][1] === 'dog'
  );
}
function howdy_doody(value) {
  let phrase = 'goodbye';

  if (isValidHowdyType(value)) {
    phrase = 'hello';
  }
  return phrase;
}

console.log(
  howdy_doody({ name: 'dog' })
);
console.log(
  howdy_doody({ name: 'dog', owner: 'Jane' })
);
console.log(
  howdy_doody({ name: 'cat' })
);
console.log(
  howdy_doody({})
);
console.log(
  howdy_doody(null)
);
console.log(
  howdy_doody()
);
.as-console-wrapper { min-height: 100%!important; top: 0; }