我是 JS 新手,正在练习编写逻辑。任何帮助/批评表示赞赏。对于整个功能,而不仅仅是我的具体问题。
我的问题是:为什么这段代码返回 --> [3,5]
function divisors(integer) {
let divisors = []
for (let i = 2; i < (integer/2); i++){
if (integer % i === 0){
divisors.push(i)
}
}
return divisors
};
divisors(15)
但是下面的代码返回True
function divisors(integer) {
let divisors = []
for (let i = 2; i < (integer/2); i++){
if (integer % i === 0){
divisors.push(i)
}
}
return divisors ? divisors != [] : 'test${interger} is prime'
};
divisors(15)
这就是我想写的: 如果除数 != [],则返回除数,否则 f'{integer} 是素数'
如果你能准确解释两个代码块之间发生了什么,那就太好了
但是下面的代码返回True
这就是这次操作的结果:
divisors ? divisors != [] : 'test${interger} is prime'
如果
divisors
是 truthy 值,则此表达式解析为 divisors != []
的结果,即 true
。否则,它将解析为字符串 'test${interger} is prime'
。
大概你的意图是返回
divisors
(如果它非空),否则返回字符串。在这种情况下,您可以测试数组的length,并返回数组本身(而不是与空数组进行比较)。例如:
divisors.length > 0 ? divisors : 'test${interger} is prime'
顺便说一句......这不是“单行 if 语句”。这是使用三元条件运算符的表达式。虽然功能具有相似的方面,但三元条件表达式和
if
语句/块不能相互替代。
条件运算符由三个部分组成:
condition ? true value : false value
你写道:
divisors ? divisors != [] : 'test${interger} is prime'
所以条件是
divisors
(即是divisors
真值)。
如果是,则返回
divisors != []
。 !=
运算符为您提供一个布尔值。没有值会等于全新的数组,因此 divisors != []
将始终为 true。
这就是我想写的:如果除数!= [],则返回除数,否则 f'{integer} 是素数'
那么你有三个问题
divisors
永远不会不等于全新的数组。测试“是否为空数组”就是测试它的
length
。
divisors.length > 0 ? divisors : `test${interger} is prime`
您可以将 divisors.length > 0
简化为
divisors.length
,因为
0
是假值,任何其他数字都是真值。