Strings são objetos ou são tipos primitivos?(JavaScript)
Posted in JavaScript on July 8th, 2008 by Edipo Luis Fderle – 1 CommentTemos as duas seguinte linhas:
[sourcecode language='javascript']
var s = “Welcome do the Jungle”
var ultima_palavra = s.substring(s.lastIndexOf(“ “)+1, s.length);
typeof(s); ==> string
[/sourcecode]
primeira linha simplesmente atribuimos uma frase a váriavel s, e na segunda atribuimos a ultima palavra da frase à variavel ultima_palavra, e por ultimo usando o typeof para verificar o que o js diz que s é, e ele nos diz que s é string, mas usamos notação de objeto para “pegar” a ultima palavra da frase.
Para operar string usamos a notação de objetos, mas como foi dito acima segundo o typeof s é um tipo string:
[sourcecode language='javascript']
typeof(s); ==> string
[/sourcecode]
Podiamos fazer s um objeto mesmo e iria funcionar da mesma forma, veja:
[sourcecode language='javascript']
var s = new String(“Welcome to the Jungle”);
typeof(s); ==> object
[/sourcecode]
Porque se usa notacão de objeto para tratar de string então?
O JavaScript contém três classes uma para cada tipo de dados, number, string e boolean, essas classes por sua vez contém métodos e propriedade para manipular esses valores, então quando tentamos manipular uma string em contexto de objeto o JS cria por trás dos “panos” um objeto que irá ser usado no lugar no valor primitivo, e como esse objeto tem métodos e propriedades definidas podemos usar em contexto de objeto com sucesso, veja:
[sourcecode language='javascript']
var a = “Welcome to the Jungle”;
typeof(a); ==> String
var comprimento = x.lenght; ==> 21
typeof(a); ==> String
[/sourcecode]
Após o uso o js “joga fora” esse objeto pois ele foi não necessita mais dele.
E se for feito algo do tipo:
[sourcecode language='javascript']
var i = new String(“Welcome to the Jungle”);
[/sourcecode]
O que acontece aqui, usamos um objeto string com o operador +, o js então criou um valor primitivo de string para que possa ser feita a concatenção usando o “ + ”.
O mesmo esquema vale para tipos number e boolean.
OBS: Referência: JavaScript – O guia definitivo 4ª Edição.