Diferente intre variabile String si Obiect in javascript

Discutii si intrebari legate de scripturi si functii JavaScript, jQuery si Ajax, cod JavaScript in general.
sterica
Mesaje: 285

Diferente intre variabile String si Obiect in javascript

Salutare,
Incerc sa inteleg care sunt diferentele dintre cele doua variabile:

Cod: Selectaţi tot

var x = "John";
var y = new String("John");
Cum se poate utiliza variabila y?

De ce cand se compara cele doua variabile x si y se returneaza false, pe cand ele sunt identice?

Cod: Selectaţi tot

<p id="demo"></p>

<script>
var x = new String("John");  // x is an object
var y = new String("John");  // y is an object
document.getElementById("demo").innerHTML = (x===y);
</script>
Multumesc!

MarPlo Mesaje: 4343
Salut
Cand se foloseste instructiunea "new" se creaza un obiect, care nu e o valoare exacta, ci un grup cu metode si proprietati. De aceea nu pot fi comparate cu: "==".
La un obiect se pot adauga noi proprietati; exemplu:

Cod: Selectaţi tot

A = new String('foo');
A.b = "bar";
alert(A.b); // bar
Dar la o variabila cu o valoare anume, care nu e obiect, ci direct un sir sau numar (numita generic "primitive"), nu se poate adauga ceva ierarhic.
Exemplu:

Cod: Selectaţi tot

var a ='abc';
a.b ='xdyz';
alert(a.b); //undefined
Pe scurt:

Cod: Selectaţi tot

var x = "John";  //variabila cu valoare primitiva, fixa
var y = new String("John");  //obiect cu proprietati si functii
- Nu cunosc mai multe detalii folositoare despre acest subiect, dar poti sa gasesti pe internet la cautare:
" javascript string object vs primitive ".

sterica Mesaje: 285
Ca sa inteleg mai bine la acest cod:

Cod: Selectaţi tot

A = new String('foo');
A.b = "bar";
alert(A.b); // bar
este acelsi cu?:

Cod: Selectaţi tot

person = new Object ();
person.firstName = "John";
person.lastName = "Titan";

alert(person.firstName); // John
In primul exemplu, daca vreau sa alertez 'foo' cum fac acest lucru?

Multumesc!

MarPlo Mesaje: 4343
Fiecare obiect are proprietatile si metodele lui specifice.
Obiectul new Date() are functii specifice pentru lucru cu data si timp.
La obiectul new Object() se pot aplica functii pentru lucru cu proprietati si valori structurate in obiecte. De exemplu metodele keys() si values() specifice pentru obiecte si array:

Cod: Selectaţi tot

var obj = new Object();
obj.p1 =123;
obj.p2 ='abc';
var props = Object.keys(obj);  //get the properties
var vals = Object.values(obj);  //get the values
console.log(props);  // ["p1", "p2"]
console.log(vals);  // [123, "abc"]

//acelasi lucru, mai simplu
var obj ={p1:890, p2:'xyz'};
var props = Object.keys(obj);  //get the properties
var vals = Object.values(obj);  //get the values
console.log(props);  // ["p1", "p2"]
console.log(vals);  // [890, "xyz"]
Obiectul new String() are functii pentru lucru cu siruri, cum ar fi: trim(), concat(), fontcolor(); si altele, care pot fi aplicate si direct la variabila cu valoare tip sir.

Cod: Selectaţi tot

var S1 = new String('abc');
var S2 = new String('xyz');
var str = S1.concat(S2);
alert(str);  // abcxyz

//sau direct la variabile cu sir
var s1 ='abc';
var s2 ='123';
var str = s1.concat(s2)
alert(str);  // abc123
Ca sa obtii valoarea /sirul de la obiectul String(), se aplica metoda specifica pentru aceasta, adica valueOf(); sau alta metoda ce returneaza un sir (dar indicat fiindca e special pt. asta este valueOf()).

Cod: Selectaţi tot

var S1 = new String('abc');
var str = S1.valueOf();
alert(str);  // abc

//sau cu alta metoda ce returneaza un sir, ex. trim()
var S2 = new String('xyz');
var str = S2.trim();
alert(str);  // xyz

Subiecte similare