Dlaczego RegExp /^\w+$/
pasuje do undefined
?
Przykładowy kod:
alert(/^\w+$/.test(undefined));
To pokaże prawdziwe w Firefoksie 3 (tylko przeglądarki Testowałem go).
Dlaczego RegExp /^\w+$/
pasuje do undefined
?
Przykładowy kod:
alert(/^\w+$/.test(undefined));
To pokaże prawdziwe w Firefoksie 3 (tylko przeglądarki Testowałem go).
Po odlaniu undefined
na łańcuch (który wykonuje wyrażenie), powstaje ciąg znaków "undefined"
, który jest następnie dopasowywany.
/(\w)(\w)(\w)(\w)(\w)/.exec(undefined);
powraca: ["undef", "u", "n", "d", "e", "f"]
To jest traktowanie niezdefiniowane jako ciąg "undefined"
.
Zobacz rozdział Specyfikacja ECMAScript 15.10.6.2 dla RegExp.prototype.exec (string), który będzie wywoływany z metody .match. Dopasowanie w zasadzie jest exec, gdy jest oceniane na true.
Oto słowo po słowie od specyfikacji: Wykonuje Dopasowanie wyrażenia regularnego sznurka z wyrażenia regularnego i zwraca obiekt Array zawierający wyniki meczu, lub null, jeśli ciąg nie pasuje toString String (ciąg) jest wyszukiwane w celu wystąpienia wzorca regularnego wyrażenia w następujący sposób:
Jak widać, przetłumaczy dowolne dane wejściowe na ciąg, więc niezdefiniowane stanie się "niezdefiniowane", a to będzie zgodne z prawdą.
Przetestowano to również poza przeglądarką, używając JScript w wierszu poleceń i uzyskując ten sam wynik.
Ma sens, choć jest nieco nieintuicyjny. – cdmckay
Być może trochę ... ale w JavaScript nie ma prawdziwego pojęcia wyjątków lub czegoś podobnego, trochę dziwaczne zachowanie jest lepsze niż umieranie w ciszy. –
Cóż, są błędy (https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Error) ... – cdmckay