📜  如何否定 JavaScript 中的谓词函数?(1)

📅  最后修改于: 2023-12-03 14:52:11.573000             🧑  作者: Mango

如何否定 JavaScript 中的谓词函数?

JavaScript 中的谓词函数是一种返回布尔值的函数,用于判断某一对象或值是否符合某种特定的条件。通常情况下,谓词函数的名称会以 "is" 或 "has" 开头。

如果我们需要否定谓词函数的返回值,可以通过在前面加上 "!" 符号来实现。例如:

function isPositive(n) {
  return n > 0;
}

const num = -10;
if (!isPositive(num)) {
  console.log(num + " is not a positive number.");
}

在上面的例子中,我们定义了一个谓词函数 isPositive,用于判断一个数字是否为正数。然后我们定义了一个变量 num,并将其赋值为 -10。接着我们使用 if 语句来判断 num 是否不是正数,如果是,则输出一条消息。

在判断语句中,我们在 isPositive(num) 的前面加上了 "!" 符号,这表示我们要否定 isPositive 函数的返回值。因为 -10 不是正数,所以 isPositive(num) 的返回值为 false,加上 "!" 后变为 true,因此上述判断语句返回 true,输出了一条消息。

除了直接在判断语句中使用 "!" 符号外,我们也可以将其放在变量声明或赋值语句中。例如:

const isNegative = n => n < 0;
const negativeNum = -10;
const isNonNegative = !isNegative;

console.log(isNegative(negativeNum));      // true
console.log(isNonNegative(negativeNum));  // false

在上面的例子中,我们定义了一个箭头函数 isNegative,用于判断一个数字是否为负数。我们还定义了一个变量 negativeNum,并将其赋值为 -10。然后我们将 isNegative 的返回值取反,并将结果赋值给 isNonNegative。最后我们使用 console.log 输出了 isNegative 和 isNonNegative 在 negativeNum 上的返回值。

注意,如果我们使用短路运算符 && 或 ||,或使用三元运算符(?:)来判断谓词函数的返回值,就不能直接使用 "!" 符号来否定其返回值。例如:

const hasName = person => person.name !== undefined;
const person1 = { age: 20 };
const person2 = { name: "Alice", age: 22 };

console.log(hasName(person1) && "Name is defined.");   // false
console.log(hasName(person2) && "Name is defined.");   // "Name is defined."

在上面的例子中,我们定义了一个箭头函数 hasName,用于判断一个人是否有名字。我们还定义了两个对象 person1 和 person2,分别只包含年龄和姓名和年龄两个属性。然后我们使用短路运算符 && 来判断 person1 和 person2 是否有名字,并输出对应的消息。

如果我们要否定 hasName 的返回值,就不能直接在判断语句中使用 "!" 符号。而是要使用 "!=" 或 "!== " 运算符,例如:

console.log(hasName(person1) !== true && "Name is not defined.");   // "Name is not defined."
console.log(hasName(person2) !== true && "Name is not defined.");   // false

在上面的例子中,我们将 hasName 的返回值与 true 进行比较,以检查其是否为 false。如果为 false 则表示返回值为 true,即 person1 或 person2 有名字,这时我们输出一条消息。注意,这里我们使用的是 "!== " 运算符而不是 "!=" 运算符。因为 "!=" 运算符会进行类型转换,可能导致意想不到的结果。

总的来说,JavaScript 中的谓词函数非常实用,可以提高代码的可读性和可维护性。而通过在谓词函数的返回值前加上 "!" 符号,可以轻松地否定其返回值。