Pytanie

Chociaż można wyraźnie sprawdzić, czy wartość jest prawdziwa lub fałsz, jest to konwencja w JavaScript, aby przetestować wszystkie wartości falsowe. Na przykład możemy przetestować, czy wartość zmiennej jest falsja, testując, jeśli (wartość).

Kod

function UnconventionalDefaults(params, defaultParams) {
  if (params === undefined) {
    params = defaultParams;
  }

  // function would do work here

  return params;
}

// Modify this function to set params to defaultParams if params
// is falsy
function moreConventionalDefaults(params, defaultParams) {
  // do a more conventional check here (check if params is falsy, 
  // and not just undefined
  if(params === undefined){
    params === defaultParams;
  }else if(params === null){
    params === defaultParams;
  }else if(params === ""){
    params === defaultParams;
  }else if(params === false){
    params === defaultParams;
  }

  return params;
}

Chociaż testuję przed wszystkimi wartościami falsów, ten kod nie jest akceptowany. Co robię źle? Czy jest lepszy sposób, aby to zrobić?

0
Rafay 1 grudzień 2011, 20:31

4 odpowiedzi

Najlepsza odpowiedź
  • Nie można użyć ===, aby przypisać params. Zamiast tego użyj =.

  • Również te nie wszystkie wartości falsyczne, brakuje ci 0 i NaN.

Cała metoda może być uproszczona do:

function moreConventionalDefaults(params, defaultParams) {
  return params || defaultParams;
}

params zostanie oceniona, a jeśli jest falsja, a następnie zwrócona zostanie defaultParams.

Edytuj: Mieć łup w świetnym artykule Exploring Logical JavaScript lub operatora Dodatkiem OSMAN, aby uzyskać więcej informacji.

7
kubetz 1 grudzień 2011, 17:05

Spróbuj tego, proszę

function moreConventionalDefaults(params, defaultParams) {
    if (!params) params = defaultParams;
    return params;
     // or just 
    return params || defaultParams;
}
3
balkon_smoke 1 grudzień 2011, 16:37

Najlepszym sposobem na test dla wszystkich wartości falsowych jest użycie wyciągu if. Na przykład

if (params) {
  // Truthy
} else {
  // Falsy 
}

Zostawię ci odpoczynek.

2
JaredPar 1 grudzień 2011, 16:35

Myślę, że pytanie prosi o:

function moreConventialDefaults(params, defaultParams) {
    if (!params) {
        params = defaultParams;
    }
}

Oświadczenie if Wykonuje oświadczenie, czy warunek ocenia true (I. jest prawdą), w przeciwnym razie wykonuje stan else.

Więc przez negowanie parametru params (!params), wykonujemy stwierdzenie tylko wtedy, gdy warunek ocenia false (I.e. falsey), o czym pytanie jest pytanie.

0
Matt 1 grudzień 2011, 16:34