2010-03-12 2 views
5

Sowohl in Actionscript3 und Javascript diese Aussagen das gleiche Ergebnis:Ist es ein Fehler in Ecmascript - /S/.test(null) gibt true zurück?

/\S/.test(null) => true 
/null/.test(null) => true 
/m/.test(null) => false 
/n/.test(null) => true 

Es scheint, dass Nullwert in String "null" in diesem Fall umgewandelt wird.

Ist dies ein bekannter Fehler in Ecmascript oder fehlt mir etwas?

+8

Pro-Tipp: Sie werden nie einen Fehler in einer Sprache oder einem Werkzeug finden. Das machen nur super coole Programmierer. – Marius

Antwort

11

geben Es ist kein Fehler, aber Sie haben recht, nullcoerces zu 'null' und dieses Verhalten ist auf der SP definiert EG:

  1. RegExp.prototype.test(string) ist intern äquivalent zu dem Ausdruck: RegExp.prototype.exec(string) != null
  2. Der exec Methodentyp das erste Argument Zeichenkette konvertiert, die ToString interne Operation unter Verwendung (aussehen Schritt 1 der exec Methode).
  3. Die interne Operation ToString gibt explizit "null" zurück, wenn der Eingang Typ Null ist.

Abschließend in Ihren Beispielen matchs die RegExp gegen die Saite 'null', so die ersten Nicht-Leerzeichen, in diesem Fall wird der Brief 'n'.

var a = null+''; // 'null' 
/\S/.test(a); // true 
(null+'').match(/\S/) // ["n"] 
3

null ist ein Objekt, und wenn sie gegen Objekte Testen (non-string), seine erste konvertierte zu bespannen, dann seine du das Ergebnis.

Sie könnten versuchen mit /Number/.test(Number) oder /String/.test(String), die true auch zurückgeben würde.

Wahrscheinlich String(null) genannt wird, die 'null' ist

String(Number)

function Number() { 
    [native code] 
} 

und /function Number/.test(Number) Rückkehr true zu

+5

Technisch ist 'null' kein Objekt, es ist ein primitiver Wert, dieses Missverständnis ist seit Jahren da, leider ist sogar der 'typeof'-Operator falsch, da 'typeof null ==' object'' völlig falsch ist. Leider war dies zu spät, um in der ECMAScript 5th Edition behoben zu werden. http://wiki.ecmascript.org/doku.php?id=proposals:typeof – CMS

+0

Danke @CMS für die Informationen. + 1ed zu deinen. – YOU

Verwandte Themen