我可以在 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; }
代码如下:
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; }