【问题标题】:How does the "not" operator work in this function?“not”运算符在这个函数中是如何工作的?
【发布时间】:2020-12-31 16:16:41
【问题描述】:

我无法理解此函数如何根据 num 是否可被 100 整除来返回 true 或 false。“not”运算符让我感到厌烦。

    function divisible(num) {
    return !(num % 100)
}

我是这样写函数的:

    function divisible(num) {
    return num % 100 === 0 ? true : false;
}

第一个解决方案看起来更简洁,我想了解它是如何工作的。

【问题讨论】:

  • 如果 num%100 == 0,你否定它,它变成 1,所以为真,否则如果你否定其他任何东西,则为 0,所以为假
  • 这是对! 的讨厌使用。我知道您一般会问! 是如何工作的,但在示例中,return num % 100 !== 0 确实更具可读性。
  • 个人偏好是喜欢!(num % 100)还是num % 100 !== 0,但是在任何一个(或任何布尔表达式)之后添加? true : false是非常多余的。

标签: javascript function conditional-operator


【解决方案1】:

在 javascript 中,0(零)是falsy,这使得!0(非零)truthy

来自MDN docs on falsiness

假(有时写成假)值是在布尔上下文中遇到时被认为是假的值。

JavaScript 使用类型转换将任何值强制转换为需要布尔值的上下文,例如条件和循环。

所以在你的情况下,这些是等价的:

return num % 100 === 0 ? true : false;
return num % 100 === 0;  // ternary not necessary; expression already evaluates to a boolean
return !(num % 100) // zero is falsy; negate to reverse it

【讨论】:

  • 0 的虚假实际上会使!0 为真,而不是真,因为! 是一个布尔运算符,其结果是一个布尔值。
【解决方案2】:

a == 0!a 在 JavaScript 中是等价的,因为 0 是 Falsy,并且当在其上应用像 ! 这样的布尔运算符时,它将被视为 false。因此,仅当整数除法的余数为 0 时,!(x % y) 的计算结果为 true,因为所有其他整数值都是真值。

【讨论】:

  • ...如果 a 是一个数字,而不是 NaN
【解决方案3】:

请注意,在 JS 中,0 代表falsy,其他所有非空数值对应于truthy“在布尔上下文中”。 如果num 可以被100 整除,那么num%100 将等于0 0 的否定,即!(0)1,这意味着true, the number is perfectly divisible by 100。 否则如果num%100给出的值不是0,而<anything other than 0>的否定是0,对应false, the number is not completely divisible by 100

【讨论】:

  • “所有其他值对应true”,不完全正确,空字符串、null、undefined和NaN也会对应false
  • 哦,菜鸟的错误。感谢您指出。已更正。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-11
  • 2017-04-09
  • 2011-04-26
  • 2015-10-23
  • 2012-04-10
  • 1970-01-01
相关资源
最近更新 更多