我对 JS 三元条件运算符做错了什么

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

我是 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
3个回答
1
投票

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

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


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'
此外,如果该字符串是一个

模板文字,那么它使用了错误的引号:

divisors.length > 0 ? divisors : `test${interger} is prime`


顺便说一句......这

不是“单行 if 语句”。这是使用三元条件运算符的表达式。虽然功能具有相似的方面,但三元条件表达式和 if

 语句/块不能相互替代。


-1
投票
根据我的理解,您正在尝试找出给定整数的除数,在您的例子中,为 15。

数字 15 的约数是 [1, 3, 5, 15],假设这应该是你的输出。

情况并非如此,因为您从 2 开始循环迭代(明确排除除数 1)并且仅上升到整数的一半,这意味着您最终也会排除整数本身作为除数。

在这种情况下,您只剩下 3 和 5,如第一个结果所示。

关于第二个结果:

您的单行/单语句/三元验证

divisor 是否具有值。如果它有值,则将结果返回给条件:

divisors != []
鉴于它有一个值,[3, 5],如前所述,并且上面的陈述为真,您将获得 

True 作为函数输出。

我相信您想要实现的目标:

return divisors != [] ? divisors : f'{integer} is prime'
上面的三元语句计算第一个条件(除数与空数组不同),如果为 true,则返回除数,否则返回第二个条件(字符串),格式如下:

return {condition} ? {value_if_true} : {value_if_false}
如果答案足够清楚,请告诉我,还有什么我可以帮助的。

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