truthy/falsey 有问题
trouble with truthy/falsey
快速介绍一下,我是一个学习 JS 的菜鸟,感觉进展顺利,但是我现在正在做一个简单的练习,我挂断了一些东西。
我了解到:
假值是在布尔上下文中遇到时被认为是假的值
例如:false、0、-0、0n、""、null、undefined、NaN(不是数字)
truthy 是除 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()
编辑:
这个问题因为片段而有点混乱,我知道你在试图寻找虚假值。
原因:
value => value == true
会打印出 false 这是因为数组元素的 none 等于 true
.
关于什么是虚假值,您是正确的,但这并不意味着真实值是 ==
到 true
。
在这里您可以阅读更多相关信息:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness
检查真值的一种方法是:
(values.some(value => value != false))
或
(values.some(value => !!value === true))
旧答案:
因为您使用的方法测试数组中至少有一个元素符合条件。
你可以阅读更多here
如果要检查数组的所有元素是否都符合条件,那么可以使用.every()
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every
let values = [11, NaN, [], ""]
function checkForFalsey() {
if (values.every(value => value == false)) {
console.log("All values are falsey");
} else {
console.log("NOT all values are falsey");
}
}
checkForFalsey()
一个字符串既不是真值也不是假值。发生的事情称为类型强制。由于 string 和 Boolean 不是同一类型,因此 JavaScript 强制其中一种类型与另一种匹配,然后检查相等性(高级解释)。详细解释见这里:https://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/
因此,当您执行 "abc" == true
时,JavaScript 会将两个值都强制转换为数字类型。字符串不是数字,因此 toNumber("abc")
returns NaN
。它还将 true
强制转换为一个数字,在本例中为 returns 1
(如您所述,1 为真,0 为假)。
就其价值而言,NaN
也不是真实的或虚假的。将它与 true 或 false 进行比较总是会得到 false
.
快速介绍一下,我是一个学习 JS 的菜鸟,感觉进展顺利,但是我现在正在做一个简单的练习,我挂断了一些东西。
我了解到: 假值是在布尔上下文中遇到时被认为是假的值 例如:false、0、-0、0n、""、null、undefined、NaN(不是数字) truthy 是除 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()
编辑:
这个问题因为片段而有点混乱,我知道你在试图寻找虚假值。
原因:
value => value == true
会打印出 false 这是因为数组元素的 none 等于 true
.
关于什么是虚假值,您是正确的,但这并不意味着真实值是 ==
到 true
。
在这里您可以阅读更多相关信息:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness
检查真值的一种方法是:
(values.some(value => value != false))
或
(values.some(value => !!value === true))
旧答案:
因为您使用的方法测试数组中至少有一个元素符合条件。
你可以阅读更多here
如果要检查数组的所有元素是否都符合条件,那么可以使用.every()
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every
let values = [11, NaN, [], ""]
function checkForFalsey() {
if (values.every(value => value == false)) {
console.log("All values are falsey");
} else {
console.log("NOT all values are falsey");
}
}
checkForFalsey()
一个字符串既不是真值也不是假值。发生的事情称为类型强制。由于 string 和 Boolean 不是同一类型,因此 JavaScript 强制其中一种类型与另一种匹配,然后检查相等性(高级解释)。详细解释见这里:https://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/
因此,当您执行 "abc" == true
时,JavaScript 会将两个值都强制转换为数字类型。字符串不是数字,因此 toNumber("abc")
returns NaN
。它还将 true
强制转换为一个数字,在本例中为 returns 1
(如您所述,1 为真,0 为假)。
就其价值而言,NaN
也不是真实的或虚假的。将它与 true 或 false 进行比较总是会得到 false
.