Я знаю, что в php 5.3 вместо использования этого избыточного синтаксиса тернарного оператора:
startingNum = startingNum ? startingNum : 1
... мы можем использовать сокращенный синтаксис для наших тернарных операторов, где это применимо:
startingNum = startingNum ?: 1
И я знаю о тернарном операторе в javascript:
startingNum = startingNum ? startingNum : 1
... но есть ли стенография?
javascript
ternary-operator
Веб-дизайнер
источник
источник
||
вместо??
?||
оператор JS не возвращает true или false, он возвращает первое «истинное» значение. Скажем , у вас есть ,val0
и ,val1
какundefined
иval2
есть2
,val3
есть3
.val0 || val1 || val2 || val3
вернется2
, так как это первое «истинное» значение.||
вернет первое истинное значение, с которым столкнется, и поэтому может использоваться как оператор объединения, аналогично C #??
источник
Да, есть:
В общем,
expr1 || expr2
работает следующим образом (как указано в документации ):источник
if a is truthy
vs.if a is evaluated to true
?В этом случае вы можете использовать оператор ИЛИ.
источник
Если у вас есть условие с нулем, например
ты можешь использовать '&&'
источник
anything && null
оценивать значение null, еслиanything
это не ложь?Приведенные выше ответы верны. В JavaScript следующий оператор:
можно выразить как
Другой сценарий, не описанный здесь, - это если вы хотите, чтобы значение возвращало false, если оно не соответствует. Сокращение в JavaScript для этого:
Но это можно выразить как
Просто хотел осветить другой сценарий на случай, если другие будут искать более общий ответ.
источник
x = innerWidth * 0.0375 > 24 ? innerWidth * 0.0375 : 24
???innerWidth * 0.0375 > 24
отличается от тойif true
части, которая естьinnerWidth * 0.0375
. Сокращение можно использовать только в том случае, еслиexpression to be evaluated
иif true
являются одинаковыми значениями. То же самое, почему вы не можете вести стенографиюx = someBoolean ? 'Heck yea!' : 'No way!'
.Math.max(innerWidth * 0.0375, 24)
Math.max
в вашем случае работает лучше, чем тернарный оператор.startingNum = startingNum ? otherNum : 1
можно выразить какstartingNum = otherNum || 1
" неверно. я только что проверил этоЧтобы сделать тернар вроде:
в javascript вы можете:
Пример:
источник
x = innerWidth * 0.0375 > 24 ? innerWidth * 0.0375 : 24
стало бы(innerWidth * 0.0375 > 24 && innerWidth * 0.0375) || 24
?? есть ли сокращение, чтобы мне не приходилось повторятьinnerWidth * 0.0375
, кроме как присвоить его переменной ???Math.max( innerWidth * 0.0375 , 24 )
будет работать элегантно. В более общем случае было бы хорошо создать описательный метод с названием, например, somethingifiedInnerWidth, который улучшает читаемость, а не создавать переменную. Хотя в некоторых случаях было бы более читабельно иметь переменную (с таким описательным именем), поэтому в будущем возникает вопрос «почему она умножается на это?» не возбуждается.Math.max
. супер шикарное решение !!