2010-03-12 13 views
5

Tanto en ActionScript3 y Javascript estas declaraciones dan el mismo resultado:¿Es un error en Ecmascript - /S/.test(null) devuelve cierto?

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

Parece que el valor nulo se convierte en cadena "nula" en este caso.

¿Este es un error conocido en Ecmascript o me falta algo?

+8

Consejo profesional: nunca encontrará un error en un idioma o una herramienta. Solo los programadores geniales hacen eso. – Marius

Respuesta

11

No es un insecto, pero tienes razón, nullcoacciona a 'null' y ese comportamiento se define en la sp ec:

  1. RegExp.prototype.test(string), internamente es equivalente a la expresión: RegExp.prototype.exec(string) != null
  2. El exec tipo método convierte el primer argumento de cadena, usando el funcionamiento interno ToString (busque el Paso 1 del método exec).
  3. La operación interna ToString, devuelve explícitamente "null" cuando la entrada es de tipo Null.

En conclusión, en sus ejemplos, la expresión regular matchs con la cadena 'null', por lo que el primer carácter no-espacio, en este caso la letra 'n'.

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

null es un objeto, y cuando se prueba contra objetos (que no son cadenas), su primer convertido a la cadena, entonces es que le da ese resultado.

Puede probar con /Number/.test(Number) o /String/.test(String), que devolvería true también.

Probablemente se está llamando String(null), que es 'null'

String(Number) dará

function Number() { 
    [native code] 
} 

y /function Number/.test(Number) retorno true demasiado

+5

Técnicamente 'null' no es un objeto, es un valor primitivo, este error ha estado ahí durante años, desafortunadamente incluso el operador' typeof' está equivocado, ya que 'typeof null == 'object'' que es completamente incorrecto. Lamentablemente, esto fue demasiado tarde para ser corregido en la 5ª edición de ECMAScript. http://wiki.ecmascript.org/doku.php?id=proposals:typeof – CMS

+0

Gracias @CMS por las informaciones. + 1ed al tuyo – YOU

Cuestiones relacionadas