2016-06-23 5 views
0

Also basierend auf diesem Link, Is it a bug in Ecmascript - /\S/.test(null) returns true?, sieht es so aus, als ob der Null-Wert zu einer Zeichenkette 'null' gezwungen wird. WTF? Warum in aller Welt ist das so geplant? Ich kann auch keine Dokumentation zu diesem Verhalten finden. Gibt es eine Möglichkeit, false für null/undefined Werte zurückgeben (ohne Hardcoding in Prüfungen für "Null", etc.)?Einfachere Möglichkeit, dass RegExp.test() false für Nullwerte zurückgibt?

+0

Wie wäre es mit e. G. '/, /. test ([,,,]) === true' wenn das Argument nicht null ist, aber kein String? –

Antwort

1

Das Argument von RegExp.test() wird erwartet, zu überprüfen, eine sein Zeichenfolge. Wenn es nicht ist, wird es in einen String umgewandelt:

var regex = /\[object Object\]/; 
 
console.log(regex.test({})); // true

Dieses Standardverhalten in JavaScript ist. Z.B. "null".replace(null, {}) === "[object Object]".

Follow Check if a variable is a string zu überprüfen, ob das Argument eine Zeichenfolge ist:

if (typeof myVar === 'string' || myVar instanceof String) { ... } 
else return false; 
0

Sie können die Testmethode überschreiben.

old = regex.test 
regex.test = function(str){ 
    str = str? str: ""; 
    return old.call(this, str); 
} 
regex.test(null); // false 

Eine Möglichkeit ist Ihre erwartete Ausgabe zu erhalten ist, den Wert zuerst und ersetzen sie durch "" leere Zeichenfolge bei null oder undefined

let regex = /[a-z]+/; 
function test (inp){ 
    return regex.test(inp? inp: ''); 
} 

test(null); // false 
test(undefined); // false 
1

Wenn Sie eine Variable zu test, könnten Sie tun:

regex.test(var || '') 

, so dass es auf den Standard wird Leerstring, wenn es nicht gesetzt ist.

Verwandte Themen