2013-06-22 2 views
3

Я всегда использовал следующий синтаксис, чтобы гарантировать, что входная переменная не равна null.Предоставление строкового параметра по умолчанию в JavaScript

function f(input){ 
    if(input === null) 
    input = ""; 
    ... 
} 

В последнее время я заметил, что короче выразить это следующим образом.

function f(input){ 
    input = input ? input : ""; 
    ... 
} 

Но также я видел этот синтаксис.

function f(input){ 
    input = input || ""; 
    ... 
} 
  1. Есть те эквивалент (не в , что они делают, но в как они делают это)?
  2. Что наиболее рекомендуется (читаемость и т. Д.)?

Обратите внимание, что я буду строго работать со входами строк так, чтобы он был либо действительным, либо нулевым (не предоставленным вообще). Если я хотел бы расширить защиту для включения других типов, какие дополнительные вопросы я должен принять во внимание?

+2

Другое - 'input || (input = ""); ' –

+0

@VitaliyPetrychuk Было бы быстрее? Кроме того, я ожидал бы * return * или * input = * перед вашим предложением. Я ошибаюсь? –

+0

Я не думаю, что это код, который вам нужно оптимизировать :) –

ответ

3

Во-первых, обратите внимание, что они не все одинаковы. # 2 и # 3 имеют точно такой же результат: если input правдиво, установите его в пустую строку. # 1 означает, говорит «если input не null, установите его в пустую строку. Так что, если false была предоставлена, input бы false в # 1, но '' в # 2 и # 3.

Если ничего не было представлено на # 1 (т.е. f(), input будет undefined, потому что это значение, которое передается, если параметр отсутствует, не null Один из них будет это исправить:.

if(input === undefined) 
if(input == null) 

в противном случае, да, они функционально эквивалентны. Для меня лучшим способом написать это будет

input = input || ""; 

Это мой предпочтительный стиль. Это может быть ваше; это не так. Но, прежде всего, быть последовательным.

+0

Кроме того, поскольку OP беспокоился о скорости в своих комментариях, ваш предпочтительный стиль [быстрее] (http://jsperf.com/check-false- value) – jeremy

+0

@Nile Хотя разница в том, что можно оптимистически назвать «бесконечно малым». – lonesomeday