Przez lata pracowałem z jQuery. Jednak ostatnio odkryłem, że zagłębiam się w język JavaScript. Ostatnio słyszałem o wartościach „prawdy” i falseyu. Jednak nie do końca je rozumiem. Obecnie mam trochę kodu, który wygląda następująco:
var fields = options.fields || ['id', 'query'];
Muszę ustalić, czy pola są puste, niezdefiniowane lub mają długość 0. Wiem, że długą drogą jest:
if ((fields === null) || (fields === undefined) || (fields.length === 0)) {
...
}
Moje pytanie brzmi: czy to samo:
if (!fields) {
...
}
javascript
użytkownik687554
źródło
źródło
Odpowiedzi:
W programowaniu prawdą lub fałszem jest jakość tych wyrażeń boolowskich, które nie przekładają się na rzeczywistą wartość boolowską, ale które mimo to są interpretowane jako wynik boolowski.
W przypadku C każde wyrażenie, które ma wartość zero, interpretowane jest jako fałsz. W JavaScript, wyrażenie
value
woceni prawdę, jeśli
value
nie jest:Zobacz także
Czy istnieje standardowa funkcja sprawdzania zmiennych JavaScript, niezdefiniowanych lub pustych w JavaScript?
źródło
Zestaw wartości „truey” i „falsey” w JavaScript pochodzi z
ToBoolean
abstrakcyjnej operacji zdefiniowanej w specyfikacji ECMAScript , która jest używana podczas wymuszania wartości na wartość logiczną:Z tej tabeli możemy to zobaczyć
null
iundefined
oba są wymuszonefalse
w kontekście logicznym. Jednak twojefields.length === 0
mapowanie nie jest generalnie fałszywe. Jeślifields.length
jest łańcuchem, to będzie traktowane jakofalse
(ponieważ jest łańcuchem o zerowej długościfalse
), ale jeśli jest to obiekt (w tym tablica), będzie zmuszonytrue
.Jeśli
fields
powinien być ciągiem, to!fields
jest wystarczającym predykatem. Jeślifields
jest tablicą, najlepszym sprawdzeniem może być:źródło
Krótka odpowiedź:
Nie , nie są tacy sami.
Ale to:
if (!fields) { ... }
Jest taki sam jak ten:
if ((fields === null) || (fields === undefined) || (fields === 0) || (fields === '') || (fields === NaN) || (fields === flase)) { ...
}
Długa (i lepsza) odpowiedź:
Porozmawiajmy najpierw o wartościach prawdy i fałszu.
Chodzi o to, co się dzieje, gdy oceniasz coś jako wartość logiczną. W JavaScript dzieje się tak, gdy używasz rzeczy takich jak
if
instrukcje; operatory logiczne podoba||
,!
lub&&
; lubBoolean()
funkcja.Boolean()
Funkcja przyjmuje wartość i powraca albotrue
czyfalse
.Na przykład:
var age = 1; // Let's evaluate age as a boolean Boolean(age); // true
Śmiało i wypróbuj to w replice węzła.
Wartość logiczna może być tylko
true
lubfalse
, więc zwracana wartośćBoolean()
musi wynosić albotrue
albofalse
. W tym przypadku przekazaliśmy wartość1
, a gdy jest oceniana jako wartość logiczna,1
jesttrue
.Ważne: Przy ocenie jako wartość logiczna wartość musi być prawdą lub fałszem. To jedyne dwie opcje.
W JavaScript jest tylko 6 wartości fałszowania. Wartości, które zostaną
false
ocenione jako wartość logiczna. Są to:false
,0
,""
,null
,undefined
, iNaN
. Więc jeśli którakolwiek z tych wartości zostanie oszacowana jako wartość logiczna, będą one fałszywe:Boolean(false) // false Boolean(0) // false Boolean("") // false Boolean(null) // false Boolean(undefined) // false Boolean(NaN) // false
Oznacza to, że każda inna wartość w JavaScript zostanie uznana
true
za wartość logiczną. Tak więc każda inna wartość w JavaScript jest prawdziwa.Innym łatwym sposobem oceny czegoś jako
boolean
jest użycie!
operatora. Podobnie jakBoolean
funkcja, wartość ta przyjmuje wartość logiczną. Ale prawdziwe stają się wartości,false
a stają się wartości fałszywetrue
.!false // true !0 // true !"" / true !null // true !undefined // true !NaN // true
Ponownie, wypróbuj to w replice węzła lub coś, aby upewnić się, że rozumiesz.
Więc to stwierdzenie:
if (!fields) { ... }
Mówi, co następuje: „jeśli jeśli
fields
zostanie ocenione jako wartość logiczna, jest fałszywe, uruchom kod w tej instrukcji if”.Co do twojego pierwszego oświadczenia:
var fields = options.fields || ['id', 'query'];
Pracujesz z logicznym operatorem OR, który warto przeczytać, aby upewnić się, że rozumiesz. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators
źródło
Twój kod oznacza:
Teraz
options.fields
jest konwertowany na wartość logiczną. Z definicjinull
,undefined
,0
,""
przekształca sięfalse
(przeważnie) cokolwiek innego przekształca siętrue
(ale nie chcę być tak precyzyjny).To nie znaczy tego samego, ponieważ
fields.length === 0
linia. Puste tablice i inne obiekty są konwertowane natrue
.Uwaga: JavaScript jest czasem dużym bałaganem ... Na przykład nie ma potrzeby używania 2 operatorów sprawdzania typu (typeof i instanceof). Po prostu myli ppl, gdy
true instanceof Boolean
nie działa, a używanietypeof(true) == "boolean"
jest podatne na błędy z powodu wpisywania łańcucha bez autouzupełniania. Być może w niektórych nowych wersjach problemy te zostaną rozwiązane.źródło
Możesz spróbować (!! pola), jeśli element pola jest pusty, niezdefiniowany lub ma długość 0, zwróci wartość true. Lub (!!! pola), to zwróci prawdę.
podwójny ! lub !! wymusi prawdę lub fałsz. Chciałbym znaleźć dobrą definicję tego, ale wydaje mi się, że nie jestem w stanie znaleźć go ponownie.
źródło