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



以下是代码:

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

我期待输出你好。我已经尝试声明person参数(请参阅下面的代码(,但获取标识符person已经声明语法错误。我对是否可以比较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'}完全相等,则会变得有点复杂。(

对于{ name: 'dog' }的精确匹配,例如可以使用Object.entries,对于任何给定的对象,它都会返回该对象自己的键值对/条目的数组。每个条目都作为键值元组提供。

因此,entries数组length的值应该恰好是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; }

最新更新