Назначение значения по умолчанию через логический оператор ИЛИ - PullRequest
3 голосов
/ 16 ноября 2011

Мы знаем, что логический оператор javascript || выдает значение своего первого операнда, если первый операнд равен true . В противном случае он выдает значение второго операнда.

Итак, в этом примере:

<script language="javascript">
function test (value){
    this.value = value || "(value not given)";
}
</script>

если параметр значение , переданный функции, обрабатывается как false как целое число 0 или пустая строка "" затем this.value будет установлено в ( значение не указано) , что не true правильно (потому что действительно мы передаем значение).

Итак, вопрос в том, какой из них лучше всего установить this.value ?

РЕДАКТИРОВАТЬ : Все 4 первых ответа используют троичный оператор "?". Мой вопрос о "||" оператор.

Ответы [ 5 ]

7 голосов
/ 16 ноября 2011

Схема с || наиболее удобна для записи, но ее можно использовать ТОЛЬКО при значении фальси (undefined, null, 0, "", false, NaN) не является законной ценностью.

Если вы хотите разрешить определенные значения Falsey и не разрешать другие, то вам нужно написать более конкретный код для обработки ваших конкретных случаев.Например, если вы хотите разрешить пустую строку, но не допускаете пустых или неопределенных или других значений Falsey, вам придется написать более конкретный код, например:

function test(value) {
    if (value || value === "") {
        this.value = value;
    } else {
        this.value = "(value not given)";
    }
}

Или если вы хотите толькочтобы исключить только undefined, вы можете проверить это специально:

function test(value) {
    if (value === undefined) {
        value = "(value not given)";
    }
    this.value = value;
}
1 голос
/ 16 ноября 2011

Правильный путь:

this.value = (typeof value == 'undefined') ? 'my argument' : value;

Вероятно, дублирующий вопрос. Google это.

1 голос
/ 16 ноября 2011

Если вы хотите иметь возможность присваивать значения Falsey, сделайте это.

this.value = (typeof value !== 'undefined') ? value : 'value not given';

При этом будут сохранены значения, такие как false, '' и 0, но будет использоваться значение по умолчанию, когда значение фактически не передается в качестве параметра.

1 голос
/ 16 ноября 2011
<script language="javascript">
function test (value){
    this.value = arguments.length > 0 ? value : "(value not given)";
}
</script>

Вы можете проверить, был ли передан этот аргумент, проверив длину массива аргументов функций.

1 голос
/ 16 ноября 2011

Это зависит от того, какие значения вы хотите исключить.Если «общие ложные значения» слишком широки для категории, вы можете быть более явными:

function test(value) {
    this.value = value !== undefined ? value : "(value not given)";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...