Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Почему new String(object) устарел? (https://javascript.ru/forum/misc/13557-pochemu-new-string-object-ustarel.html)

klimashkin 03.12.2010 13:51

Почему new String(object) устарел?
 
Не пойму, почему в статье http://javascript.ru/String указано что синтаксис устарел и не используется?

ksa 03.12.2010 14:15

Как вариант что-то устаревает из-за его неиспользования... :)

monolithed 03.12.2010 14:25

klimashkin
какой вариант для вас более предпочтителен?

alert('1'['constructor']);
alert(new String(1)['constructor']);

Snipe 03.12.2010 14:48

Я иногда использую для наглядности при сложении, например, или при сравнении. Можно конечно и пустую строку добавлять...

klimashkin 03.12.2010 14:54

Т.е. разница только в этом?

monolithed 03.12.2010 15:11

да

Kolyaj 03.12.2010 17:43

Цитата:

Сообщение от Snipe
Я иногда использую для наглядности при сложении

Так?
var s1 = 's1', s2 = 's2';
var s3 = new String(s1) + new String(s2);

Здесь сначала строки преобразуются в объекты String, после чего эти объекты преобразуются в строки. Хорошая наглядность из двух лишних преобразований.

Цитата:

Сообщение от Snipe
или при сравнении

alert(new String('a') == new String('a'))

Snipe 03.12.2010 18:44

Цитата:

Сообщение от Kolyaj (Сообщение 82168)
Так?
var s1 = 's1', s2 = 's2';
var s3 = new String(s1) + new String(s2);

Здесь сначала строки преобразуются в объекты String, после чего эти объекты преобразуются в строки. Хорошая наглядность из двух лишних преобразований.


alert(new String('a') == new String('a'))

Не угадал!
var s1 = 5, s2 = 10;
var s3 = String(s1)+s2;

Kolyaj 03.12.2010 18:48

String и new String разные вещи. ТС про new String спрашивал.

Gozar 03.12.2010 19:08

удалено.

tenshi 04.12.2010 14:39

я использую для экономии памяти

monolithed 04.12.2010 14:45

Цитата:

Сообщение от tenshi
я использую для экономии памяти

А разве не на оборот?
Я постоянно читаю различные справки на тему производительности JS и везде пишут что new Object/Array/Function/String нужно писать именно в сокращенной нотации.

tenshi 04.12.2010 15:25

var x= "много текста"
var y= x

var x= Object( "много текста" )
var y= x

что экономней?

monolithed 04.12.2010 15:55

Только что проверил:
если количество символов небольшое, то вариант с созданием объекта требует на ~20% больше времени выполнения сценария, если же брать большое количество символов, то все с точностью наоборот.

Доп.
если же вызывать объект на прямую, без промежуточной переменной, то экономия получается почти в 50%.

tenshi 05.12.2010 01:39

я про потребление памяти

что за вызов напрямую?

monolithed 05.12.2010 09:14

Цитата:

Сообщение от tenshi
я про потребление памяти

~1.5kb vs. ~6kb в пользу создания объекта. Однако на небольшом количестве символов (до 100) сложно сказать кто меньше потребляет памяти.

Цитата:

Сообщение от tenshi
что за вызов напрямую?

т.е.
var s1 = new String()
alert(s1);

либо сразу вызывать:
alert(new String());

а не так:
var s1 = new String();
s2 = s1;
alert(s2);

tenshi 05.12.2010 12:09

на небольшом количестве символов и не важно кто меньше.

x-yuri 06.12.2010 06:30

видимо, tenshi намекает на то, что тип String - не ссылочный тип. Хотя я не знаю, что может помешать реализации использовать copy on write, например

tenshi 06.12.2010 11:14

например вот это:
x = "long string"
y = x + "!"
z = x + "!"


Часовой пояс GMT +3, время: 17:35.