javascript - 真/假的麻烦
问题描述
快速介绍一下,我是一个学习 JS 的菜鸟,并且觉得它进展顺利,但是我现在正在做一个简单的练习,我挂断了一些东西。
我了解到:错误值是在布尔上下文中遇到时被认为是错误的值,例如:false、0、-0、0n、“”、null、未定义、NaN(不是数字)真的是除了falsey(如字符串、布尔值 true、非 0 的任何数字等)
所以在我下面的例子中,如果有人可以帮助我理解为什么 value => value == true,当我的数组中有一个字符串值(“Angela”)时,会打印出 false(就像这种情况一样)。谢谢!
let values = [11, NaN, [], "Angela"]
function checkForFalsey() {
if (values.some(value => value == true)) {
console.log("At least one item is falsey")
}
}
checkForFalsey()
解决方案
字符串既不真实也不虚假。发生的事情称为类型强制。由于 string 和 Boolean 不是同一种类型,JavaScript 会强制其中一种类型匹配另一种类型,然后检查相等性(高级解释)。详细解释见这里:https ://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/
因此,当您执行"abc" == true
JavaScript 时,会将这两个值强制为数字类型。字符串不是数字,所以toNumber("abc")
返回NaN
。它还强制true
转换为一个数字,1
在这种情况下返回(如您所述,1 为真,0 为假)。
对于它的价值,NaN
也不是真假。将其与 true 或 false 进行比较总是会导致false
.
推荐阅读
- visual-studio-code - 启动nodejs服务器时VS代码忽略断点
- ethereum - 来自 openzeppelin 的 `__{ContractName}_init_unchained` 的用途
- javascript - 我想在屏幕上实时打印复选框的状态
- powerquery - Power Query - 基于两个条件的组
- kotlin - defer() 和 defer{} 有什么区别
- angular - 服务如何与组件通信?
- php - SQL SELECT 语句不扫描整个表(10,000 行)
- dart - 在 Dart 中模拟二十一点游戏
- css - 如何将文本颜色更改为容器 div 的背景颜色?
- powershell - Powershell 以四位数递增