2013-03-01 2 views
1

Я хотел бы конкатенации, если заявление так:Можете ли вы конкатенировать утверждение if без использования тройной?

policeRecord = "Hi" + (if (x < crimes.length) {", ";}); 

Я знаю, что вы можете сделать это с помощью трехкомпонентной:

policeRecord = "Hi" + ((x < crimes.length) ? ", " : ""); 

Но вы можете сделать это с полным, если заявление?

+1

Разница здесь в том, что тернарный оператор приводит к значению. По сути, это что-то вызывает. Блок 'if' является всего лишь блоком кода, нет никакого результирующего значения. – David

+0

Вы можете обернуть оператор if внутри функции: 'policRecord =" Hi "+ (function() {if (x railgun

+0

Если вы хотите сделать свой код менее удобочитаемым, вы можете сделать «Hi» + ((x

ответ

1

Нет, это недопустимый синтаксис JavaScript, поэтому вы не можете этого сделать.

Я не уверен, почему вы хотели бы это сделать либо потому, что на самом деле это приводит к потере ясности (там много беспорядков символов).

Если вы хотите, чтобы делать какое-то фантазию однострочника, чтобы запутать человек без использования тройного оператора, вы можете сделать манипуляции массива/строки на основе длиной элемента:

policeRecord = "Hi" + (new Array(+(x < crimes.length) + 1)).join(', '); 
3

if является заявления , Заявления не могут использоваться как часть выражения .

Обычно выражения состоят из операторов и подвыражений и создают значения. Заявления не принадлежат ни к одной из этих категорий, они не являются выражениями, а не операторами.

Для получения дополнительной технической информации ознакомьтесь со спецификацией ECMAScript: http://es5.github.com/.

0

if является заявления и не возвращает значение, в то время как ? является оператора.

В случае function это Примечательно, что существует функция оператор и оператор функции, так что вы можете сделать

function() { } // function statement 

и вы также можете сделать

var fn = function() { }; // function operator 

Короткий ответ: Вы не могут заменить или обменять, если и?. Вы может создать функцию, которая делает это, но выполнение функции не имеет производительности собственных выражений.

+0

Интересно, что спецификация ECMAScript не перечисляет определения функций как утверждения (у них есть свой раздел). Фактически, он явно указывает, что декларации функций, рассматриваемые как утверждения, могут приводить к проблемам: http://es5.github.com/#x12. Кажется, что функции - это нечто особенное. –

+0

@FelixKling Да, javaScript интересен, за исключением спецификаций;) Вероятно, потому что он рассматривается как литерал, например {} для анонимных объектов? – metadings

+0

Я честно не знаю ... как * функция выражение *, возможно. Но объявления функций ... Я не знаю, что это такое: D –

0

Кроме того, можно создать функцию а-ля в SQL COALESCE (но проверка true вместо NULL):

function iftrue(checkThis, returnIfTrue, returnIfFalse) { 
    if(checkThis) { 
     return returnIfTrue; 
    } 
    return returnIfFalse; 
} 
policeRecord = "Hi" + iftrue(1 < crimes.length, ", ", ""); 

Не уверен, насколько лучше это было бы, тем не менее.

Смежные вопросы