2011-12-19 19 views

Respuesta

6

Es porque '' es una cadena literal, no una instancia de la "clase" String. Como las propiedades como match se declaran en String.prototype, no las verá cuando use un literal de cadena. Si se utiliza el operador new verá lo que se esperaba:

var s = new String("hello"); 
console.dir(s); 

Aquí hay una captura de pantalla de herramientas para desarrolladores de Chrome (notar la necesidad de ampliar la prototype, como el método que está esperando ver es declarado en el prototipo , no el objeto en sí String):

enter image description here

+0

Curiosamente, el resultado de Firebug es bastante diferente. – lonesomeday

+0

Hmm. Firebug parece enumerar los métodos dos veces. Una vez para el objeto mismo y nuevamente para el 'prototipo'. También parece ignorar la propiedad 'longitud '. –

+0

Todavía estoy algo poco convencido aquí. ¿Por qué ''' .match',' '' .constructor', etc. no imprime 'undefined', y aún' dir ('') 'no los imprime? – Randomblue

2

Probablemente por la misma razón que console.dir (true) y console.dir (1234) dicen que una vez que baja la perilla apuntando a los datos. Es probable que el código solo repita las propiedades si es un Objeto. Por qué esa perilla de cobertura todavía está allí no está clara.

+1

'Strings' son objetos,' Arrays' son objetos, para 'Functions' mostrará el' prototype', muy peculiar. ¿Tal vez alguna magia 'console.dir'? 'console.log' es bastante mágico también (como en DOMElements). La especificación de Firefox es muy inútil. – Halcyon

+0

"" instanceof String – peller

+0

Hmmm .. '" "instanceof String' es' false' .. ¿POR QUÉ? 'typeof" "' devuelve '" string "' though. Supongo que esto solo se puede explicar si '" "' tiene un constructor que no es 'String', aunque lo esperas. – Halcyon

0

En JavaScript, el objeto String global tiene métodos predefinidos en el idioma. Los literales de cadena reales heredan los métodos del objeto String global, pero de lo contrario no tienen propiedades, excepto "longitud".

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String

+0

Hum. Entonces, ¿por qué no se imprime ''' .length'? – Randomblue

+0

Nunca he usado console.dir. Siempre he usado console.log. ''' .length === 0' – austincheney

+0

no exactamente. Continúe leyendo sobre la diferencia entre los literales de cadena y los objetos – peller

Cuestiones relacionadas