Kura metode, lai pārbaudītu, vai mainīgais ir inicializēts, ir labāka/pareizāka? (Pieņemot, ka mainīgais var saturēt jebko (virkni, int, objektu, funkciju utt.)).
if (elem) { // or !elem
vai
if (typeof(elem) !== 'undefined') {
vai
if (elem != null) {
Jums ir nepieciešams typeof
operators. Konkrēti:
if (typeof variable !== 'undefined') {
// the variable is defined
}
Lielākajā daļā gadījumu izmantojiet:
elem != null
Atšķirībā no vienkāršā if (elem)
tas pieļauj 0
, false
, NaN
un ''
, bet noraida null
vai undefined
, padarot to par labu, vispārīgu argumenta vai objekta īpašības klātbūtnes testu.
Arī pārējās pārbaudes nav nepareizas, tām vienkārši ir atšķirīgs pielietojums:
(elem): var izmantot, ja
elemgarantēti ir objekts vai ja
false,
0u.c. tiek uzskatīti par "noklusējuma" vērtībām (tātad līdzvērtīgi
undefinedvai
null`).
typeof elem == 'undefined'
var izmantot gadījumos, kad norādītajam null
ir atšķirīga nozīme nekā neinicializētam mainīgajam vai īpašībai.
Šī ir vienīgā pārbaude, kas neizmet kļūdu, ja elem
nav deklarēts (t. i., nav vārdiņa
paziņojuma, nav window
īpašība vai nav funkcijas arguments). Tas, manuprāt, ir diezgan bīstami, jo tas pieļauj, ka pārrakstīšanās kļūdas var palikt nepamanītas. Lai no tā izvairītos, skatiet tālāk aprakstīto metodi.
Noderīgs ir arī stingrs salīdzinājums ar undefined
:
if (elem === undefined) ...
Tomēr, tā kā globālo undefined
var pārrakstīt ar citu vērtību, vislabāk pirms mainīgā undefined
lietošanas deklarēt mainīgo undefined
pašreizējā darbības jomā:
var undefined; // really undefined
if (elem === undefined) ...
Vai arī:
(function (undefined) {
if (elem === undefined) ...
})();
Šīs metodes sekundārā priekšrocība ir tā, ka JS minifīderi var samazināt undefined
mainīgo līdz vienai rakstzīmei, tādējādi katru reizi ietaupot dažus baitus.
Tas ir atkarīgs no tā, vai jums ir svarīgi tikai tas, ka mainīgais ir definēts, vai arī vēlaties, lai mainīgajam būtu kāda nozīmīga vērtība.
Pārbaudot, vai tips ir nenoteikts, tiks pārbaudīts, vai mainīgais jau ir definēts.
=== null
vai !== null
pārbaudīs tikai to, vai mainīgā vērtība ir tieši null
.
== null
vai != null
pārbaudīs, vai vērtība ir nedefinēta
vai null
.
if(value)
pārbaudīs, vai mainīgais ir nedefinēts
, null
, 0
vai tukša virkne.