Autor Zpráva
Olin
Profil *
Dobrý den, nevíte prosím někdo jaký je rozdíl v těchto několika deklaracích?

retezec = "ahoj";
var retezec = "ahoj";
retezec = new String("ahoj");
retezec = String("ahoj");
var retezec = String("ahoj");
var retezec = new String("ahoj");

Předpokládáme, že je to první výskyt proměnné retezec.
Oswald
Profil
var retezec = "ahoj";
Vytváří primitivní řetězcovou hodnotu - nevytváří se objekt String:

typeof 'test' == 'string' 

'test' instanceof String == false


Přesto jsou k dispozici všechny metody a vlastnost length z třídy String (i vlastní přidané do String.prototype):

alert('test'.toUpperCase());


V případě potřeby (např. při volání nějaké metody) řetězcová hodnota (interně) dočasně převede na objekt String.

var retezec = String("ahoj");
Taky se vytváří pouze řetězcová hodnota, výsledek volání je návratová hodnota metody toString() předaného argumentu, takže dobře poslouží k získání řetězce např. z integru. Jinými slovy:
promenna.toString() == String(promenna)



var retezec = new String("ahoj");
Stejné jako u předchozího, ale explicitně vytváří objekt String jako takový.
var x = 'a';

var y = String('a');
var z = new String('a');

x == y // true
x === y // true
x == z // true
x === z // false


Oproti primitivní hodnotě má několik drobných odlišností a je lepší se mu vyhnout, protože se může chovat trochu nečekaně (tenhle příklad je z Core JavaScript Guide 1.5):

s1 = "2 + 2" //creates a string literal value

s2 = new String("2 + 2")//creates a String object
eval(s1) //returns the number 4
eval(s2) //returns the string "2 + 2"



Podobné je to u čísel (var n = 1 / var n = new Number(1) / var n = Number(1)).
Toto téma je uzamčeno. Odpověď nelze zaslat.

0