JS单行if语句我做错了什么

问题描述 投票:0回答:2

我是 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} 是素数'

如果你能准确解释两个代码块之间发生了什么,那就太好了

javascript logic
2个回答
0
投票

但是下面的代码返回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
语句/块不能相互替代。


0
投票

条件运算符由三个部分组成:

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
 是假值,任何其他数字都是真值。

© www.soinside.com 2019 - 2024. All rights reserved.