Лучше ли возвращать `undefined` или` null` из функции javascript?

У меня есть функция, которую я написал, которая в основном выглядит так:

function getNextCard(searchTerms) {
  // Setup Some Variables

  // Do a bunch of logic to pick the next card based on termed passed through what I'll call here as 'searchTerms' all of this logic is omitted because it's not important for my question.
  // ...

  // If we find a next card to give, than give it
  if (nextCardFound)
    return nextCardFound;

  // Otherwise - I'm returning undefined
  return undefined;
}

Вопрос: было бы лучше вернуть «ноль» здесь?

Я могу передать все, что захочу - очевидно ... Я просто не был уверен, что лучше всего использовать.

Код, который вызывает эту функцию, знает, как обращаться с неопределенным (это на самом деле никогда не произойдет, если что-то не пойдет не так, как надо)

Причина, по которой я задаю этот вопрос, состоит в том, что я где-то слышал что-то вроде «Не назначать неопределенное переменным» или что-то еще - что это усложнит отладку. Итак, тот факт, что я могу видеть, чтоnull получает обратно говорит мне, что возврат работает - но в основном функция похожа наundefined.

Документация:

Mozilla Docs Не ответил на мой вопрос ... Google тоже не сделал: \ Это ТАК Вопрос

 - было слишком широко для того, что я пытаюсь понять здесь.не так ли

 Jeremy Iglehart23 июн. 2016 г., 03:08
Я читаю
 warkentien223 июн. 2016 г., 02:59
ТАК Вопрос ответ?На мой взгляд, возвращение
 chiliNUT23 июн. 2016 г., 03:13
какие разница между ними а некогда использовать одно или другое в качестве возвращаемого значения.Вы могли бы альтернативно вернуться
 Marty23 июн. 2016 г., 03:12
 как "нет подходящего значения для того, что вы просите" иnull как "Я не могу понять, что вы просите".undefined@ warkentien2 этот вопрос, и тот, который я связал в своем ответе, связан, но оба, кажется, задают
 Felix Kling23 июн. 2016 г., 02:59
, Покидатьnull самому JavaScript. Однако «лучшего» нет, так что это вопрос мнения.undefined@ warkentien2 Спасибо, это было полезно, но мне все еще неясно, что здесь за соглашение для возврата из функции получения.
 guest27131423 июн. 2016 г., 03:18
или "поисковый термин не найден", чтобы уведомить вызывающего абонента о функции, которая выполняет поискfalse что поиск произошел, хотя совпадений не найдено.searchTermЯ буду утверждать, что нет лучшего способа, и даже стандартные функции иногда выбирают одну или другую.

Ответы на вопрос(9)

undefined, В вашем случае, даже если вы ничего не вернете, результат будетundefined уже. Итак, я бы предложил пойти сundefined вместо.nullРассмотрим этот образец,

Приведенный выше пример результата в

function getSomething() {
     // .. do something
     return undefined;
}

function doSomething() {
     // .. I'm not gonna return anything.
}

var a = getSomething();
var b = doSomething();

, которыйa === b, Разница в том, что вы сохраняете 1 оператор выполнения.undefined@ Ориол, я имею в виду,

 Jeremy Iglehart23 июн. 2016 г., 03:25
 возвращает ноль в консоли.(function(){ /* code */ })()@JeremyIglehart Этот код на самом деле ничего не возвращает. И еще, это дает
 vadi taslim23 июн. 2016 г., 03:29
 на моей консоли chrome и firefox.undefinedОК, я не понял твою точку зрения. Да, если вы ничего не вернете явно, undefined будет возвращен неявно. Но почему это важно?
 vadi taslim23 июн. 2016 г., 03:22
 не должен быть назначен. Все объявленные переменные без значений ужеundefined@choz & @Oriol - как уже упоминалось ранее @chiliNUT «Обратите внимание, что функция без заданного возвращаемого значения неявно возвращает undefined». - это правда, потому чтоundefined.
 Jeremy Iglehart23 июн. 2016 г., 03:36
 если что-то еще не возвращается раньше - мне не нужно, потому что поведение функции по умолчанию, если вы ничего не возвращаете, это возвращение неопределенного - они просто говорят, что это не нужно. Далее ... Мне нравится то, что вы сказали о встроенных функциях получения, возвращающих нуль. Пожалуйста, оставьте свой ответ на этот счет, и я приму его.undefinedЗависит от того, что вам нужно сделать с возвращаемым значением.
 Oriol23 июн. 2016 г., 03:29
@ Ориоль, я думаю, что @choz пытался сказать (как некоторые другие также упоминали по этому вопросу), что если я хочу вернуться

 undefinedЯ думаю о

 присваивания как означающие «переменная, установленная в ноль». Это в отличие отnull что означает "эта вещь не там вообще"undefinedКак указано в предыдущем ответе, возвращение

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

 Jeremy Iglehart23 июн. 2016 г., 03:31
Да @Oriol, вот почему я действительно наслаждаюсь дебатами, даже на сайтах Q / A. Это действительно хорошо, чтобы получить контрпримеры. И вы предоставили хороший.
 Oriol23 июн. 2016 г., 03:24
 возвращаетсяdocument.getElementById('iDoNotExist')хотя значение ближе к "этой вещи вообще нет". Если это делают стандартные методы, то почему не OP?null@ Орёл, мне больше всего нравятся твои рассуждения. Пожалуйста, оставьте ответ на этот вопрос, и я приму его. (Я мог бы даже добавить несколько правок, если это необходимо)
 Ryan Laboucane23 июн. 2016 г., 03:55
Я бы сказал, что в этом случае
Решение Вопроса

ое

typeof undefined возвращает неопределенное значение

Лично я обычно использую ноль.

 Dan23 июн. 2016 г., 03:02
«этот объект имеет значение undefined»
 Felix Kling23 июн. 2016 г., 03:04
 Нет, это не так, и это не объект, это Нуль. не обязательно возвращает истинный тип данных значения, у него есть карта, которая отображает типы данных на метки и возвращает соответствующую метку.typeofНе верь
 Oriol23 июн. 2016 г., 03:20
Несмотря на свое имя, он не сообщает тип значения.typeofВот пример, где

 undefinedЯ использую функцию-обертку дляnull:

 который преобразует свое исключение вJSON.parseОбратите внимание, чтоundefined:

// parses s as JSON if possible and returns undefined otherwise
// return undefined iff s is not a string or not parseable as JSON; undefined is not a valid JSON value https://stackoverflow.com/a/14946821/524504
function JSON_parse_or_undefined(s) {
    if ("string" !== typeof s) return undefined

    try {
        const p = JSON.parse(s)
        return p
    } catch (x){}

    return undefined
}

 действует в JSON, аnull не является.undefinedЯ вижу, что ты там делаешь - и я не могу сказать, что ты не прав - потому что в некотором смысле я думаю, что ты мог бы сделать это здесь, и это было бы хорошо. У меня есть другой шаблон, который я использую для выполнения этой операции, который мне нравится больше, потому что я делаю шаг «проверки» после. Я чувствую, что это смешивание проверки с возвращением значения. Вот что я делаю:

 Jeremy Iglehart25 янв. 2018 г., 23:19
, Теперь я уверен, что эти два возвращения могут быть обработаны по-разному и могут не выиграть соревнование по гольфу JS. Оно работает.let getStringOrJSON = value => { try { value = JSON.parse(value); } catch(e) { return value; } return value; };Я думаю, что это очень спорно, что использовать. Я предпочитаю код, который является семантически точным, насколько это возможно, поэтому я думаю,

 nullЕсли вы рассматриваете вопрос с точки зрения теоретической информатики, то

не определено используется для указаниянезавершениебез вычислимости/  (т.е. заполнитель для неопределенной точки изxчастичная функция который часто пишется f).f(x) = ⊥ однако кажется, что он может вычислить следующую карту (если она существует), а также может вычислить, если следующей карты нет. Другими словами, функция

getNextCardВсего так как он заканчивается для каждого входа.Как говорится,

особая ценность сигнализация об окончании без значимого результата (то есть «нет карты, которую я могу вернуть для этого ввода») требуется, и это для меня неnullЗАМЕТКИ:undefined.

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

тип опции (иногда также упоминается какобнуляемый тип). Примером этого являетсяМожет быть вHaskellС другой стороны, мы, конечно, не знаем, что.

 в JavaScript действительно должно означать. Итак, аналогияundefinedне определено немного неряшливый. Более того, поскольку мы всегда хотим работать с полными функциями, это означает, что «никогда не возвращаться» от функции ". Что кажется немного строгим, так как это будет ограничивать использованиеundefined свойств / переменных, которые не были установлены.undefinedВ конце концов, мое личное предпочтение никогда не возвращаться

 куда я могу вернутьсяundefined и я бы также сказал, что это лучшее соглашение по кодированию (потому что, между прочим,null короче чемx !== null).typeof x !== 'undefined'Первый ответ правильный. Они имеют теоретически другое значение. Однако не всегда понятно, что взять.

4.3.10 неопределенное значение

примитивное значение, используемое, когда переменной не присвоено значение

4.3.12 нулевое значение

примитивное значение, представляющее намеренное отсутствие какого-либо значения объекта

http://www.ecma-international.org/ecma-262/6.0/#sec-terms-and-definitions-undefined-type

Дальнейшее чтение:

Когда в JavaScript используется null или undefined?

Да, undefined - это значение, используемое, когда переменной не было присвоено значение. Почему именно это означает, что вы не должны возвращать undefined в функции?

 chiliNUT23 июн. 2016 г., 03:29
Я намеренно присваиваю x значение и предпочел бы, чтобы он не проходил никаких тестов, которые показывают, что ему не было (или, возможно, не было) присвоено значение. Просто имхоvar x=someFunc();Я дам вам мой личный способ выбора между ними.
 Oriol23 июн. 2016 г., 03:22
@Oriol, на мой взгляд, поскольку функция void возвращает undefined, это зарезервированное значение для функций этого типа, поэтому при обработке возвращаемого значения функции null говорит мне, что она решила вернуть null, тогда как undefined сообщает мне об этом. либо решили вернуть undefined, либо решили ничего не возвращать, но я не знаю, какой именно. Далее, если я делаю

хотя я думаю, что это совершенно субъективно.

Я использую это в основном потому, что:

неопределенная переменная может быть перезаписана в старых браузерах, поэтому возвращать ее немного сложнее. Эта же проблема заставляет вас использовать

 при получении результатов функции.typeof var === 'undefined'ссылка на сайтДругие языки, как правило, широко используют null, многие из них даже не имеют неопределенных (например, php). Это дает мне последовательность при быстром переключении между языками.

Лучше ли возвращать `undefined` или` null` из функции javascript?

Решение Вопроса

[[Прототип]]

Обычные объекты имеют внутренний слот [[Prototype]], который определяет, от какого другого объекта они наследуются. Конечно, должен быть способ сказать, что объект не наследуется ни от какого другого. В этом случае «такого объекта нет» представляется с помощью

Ожидается, что он вернет дескриптор свойства, то есть объект, который описывает свойство (например, значение, возможность записи, перечислимость и конфигурируемость). Однако собственность может не существовать. В этом случае «такого свойства нет» представляется с помощьюnull.

Object.getOwnPropertyDescriptor

Ожидается, что он вернет элемент с указанным идентификатором. Тем не менее, может не быть элемента с таким идентификатором. В этом случае «такого элемента нет» представляется с помощьюundefined.

document.getElementById

Так что просто выберите то, что вы предпочитаете или считаете более целесообразным для вашего конкретного случая.null.

после

 Jeremy Iglehart23 июн. 2016 г., 04:15
читая это Я решил предложить Техника для будущих зрителей этого ответа. Я также добавил код, чтобы попытаться прояснить вашу точку зрения. Спасибо за ваш ответ!void 0Undefined обычно относится к чему-то, что еще не было присвоено значение (пока). Нуль относится к чему-то, что окончательно не имеет значения. В этом случае я бы рекомендовал вернуть ноль. Обратите внимание, что функция без заданного возвращаемого значения неявно возвращает undefined.

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

 еще использоватьnull, В более общем случае любая функция, возвращающая объект, должна возвращатьundefined когда предполагаемый объект не существует. Потому что он может существовать при другом входе / состоянии / контексте.null представляет

nullотсутствие ценности для данного ввода / состояния / контекста. Это косвенно означает, чтоконцепция само значение существует в контексте вашего приложения, но может отсутствовать. В вашем примере концепция следующей карты существует, но сама карта может не существовать. должен быть использован.null неявно представляет

undefinedотсутствие смысла этого значения в контексте вашего приложения. Например, если я манипулирую объект с заданным набором свойств, и я пытаюсь получить доступ к свойствуuser, Значение этого свойства должно быть установлено вpikatchu потому что в моем контексте не имеет никакого смысла иметь такое свойство.undefinedЭто звучит так верно для меня. ИМО чистые функции должны вернуть

 Jake11 авг. 2019 г., 23:09
в то время как функции с побочными эффектами должны возвращатьсяnull, думая, как функциональный программист.undefined это не то, что вы должны назначить. Вы можете рассмотреть возможность вернуть что-то еще, кроме

Ваш ответ на вопрос