![](/img/trans.png)
[英]Operator Precedence with Ternary Conditional and Logical And operators in JavaScript
[英]More concise alternative to JavaScript conditional ternary operator?
在很多情况下,使用conditional ternary operator
允许优先使用const
不是let
:
let scaleFactor = 1;
if (prev.scale < 1 && current.scale < 1) {
scaleFactor = 5;
}
使用三元和常量:
const scaleFactor =
prev.scale < 1 && current.scale < 1 ? 5 : 1;
我经常看到并使用这种模式。 有没有更简洁的方法来写这个我一直错过的?
更新:一个更短、更易读的三元替代示例
const t = tX > 0
? 0
: tX < width - width * scale
? width - width * scale
: tX
const t = Math.max(Math.min(tX, 0), width - width * scale)
尽管我完全同意某些人对您的问题的评论如此简短!= 简洁,但我确实认为您的问题是有效的。 在许多情况下,如果将值设置为 X 或将模式设置为 Y,则可以执行包含布尔条件作为因子的表达式。 一些选项:
if (C)
value = X
else
value = Y
可以转换为
value = C * X + !C * Y;
同样的事情可以写成:
value = X + !C * (Y - X)
我是一名游戏开发者,我经常需要这样的东西:
// 1 if the right arrow was pressed, -1 for the left, 0 otherwise
var changeInMovementX = hasRightArrowBeenPressed - hasLeftArrowBeenPressed;
// same for up and down
var changeInMovementY = hasTopArrowBeenPressed - hasDownArrowBeenPressed;
// move 1 pixel in the given directions
player.move(changeInMovementX, changeInMovementX);
对于您的具体示例,您可能会考虑以下内容:
const shouldIncreaseScale = prev.scale < 1 && current.scale < 1;
const scaleIncrease = 4;
const scaleFactor = 1 + shouldIncreaseScale * scaleIncrease;
简而言之,Javascript 中还不存在像 switch 表达式这样的语言特性。 但是你可以根据自己的喜好做一些事情
const a = 5
const c1 = (() => {
switch (a) {
case 1: {
return 2
}
case 2: {
return 3
}
default: {
return 4
}
}
})()
console.log(c1)
const c2 = (() => {
if (a === 1) {
return 2
} else if (a < 10 && b > 10) {
return 3
} else {
return 4
}
})()
console.log(c2)
// define this once
const conditionalHelper = (cases, defaultValue) => {
for (let i = 0; i < cases.length; i++) {
const [predicate, value] = cases[i]
if (predicate()) {
return value
}
}
return defaultValue
}
const c3 = conditionalHelper(
[
[() => a === 1, 2],
[() => a < 10 && b > 10, 3],
],
4
)
console.log(c3)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.