Я пытаюсь преобразовать фрагмент PHP в javascript:
function year_shortcode() {
$fromYear = 2010;
$thisYear = (int)date('Y');
return $fromYear . (($fromYear != $thisYear) ? '-' . $thisYear : '');
} add_shortcode('year', 'year_shortcode');
Что я сделал до сих пор:
var fromYear='2010';
var thisYear= new Date().getFullYear();
if (fromYear=thisYear) {
document.write(fromYear);
}
else {
document.write(fromYear + '-' + thisYear);
}
Я хотел бы избежать операторов if и else и сократить их, как в PHP.
document.write
не рекомендуется для манипуляций с DOM, так как он устарел, работает медленно и не подходит для любого развивающегося приложения. if (fromYear=thisYear)
это опечатка.
Вы можете использовать тернарный оператор так же, как и в php. Также вы должны использовать ==
или лучше ===
для сравнения равенства, а не =
.
@Paflow да, в JavaScript есть тернарный оператор ? :
, но нет, он не такой, как в PHP: правила приоритета другие (в основном противоположные PHP)
@Pointy О, спасибо, я никогда этого не понимал!
Вы могли бы сделать это
И одна вещь, которую следует отметить, =
— это оператор присваивания, если вы хотите проверить равенство между двумя значениями, используйте вместо этого ===
document.write(fromYear === thisYear ? fromYear : fromYear + '-' + thisYear)
ваш код печатает fromYear, даже если он такой же, как thisYear. Я хотел бы скрыть fromYear, если он такой же, как thisYear
Я пытался использовать тернарные операторы, как в PHP, благодаря @Pointy и @user4642212 и ответу от @hgb123. Я смог решить свой вопрос с помощью:
document.write((fromYear != thisYear) ? fromYear + " - " + thisYear : thisYear);
Да вроде так же. Тем не менее, классический способ часто кажется более удобным и читабельным, особенно при использовании в цепочке/множественных действиях.