powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / скаляр
25 сообщений из 27, страница 1 из 2
скаляр
    #35789594
Фотография alexmsp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вычитал в учебнике
Код: plaintext
1.
2.
var myString = "New York";
var lcString = myString.toLowerCase( );
Но это же вроде как скалярный тип,
т.е. опечатка ли это и надо читать как
Код: plaintext
var myString = new String("New York");
?
...
Рейтинг: 0 / 0
скаляр
    #35789606
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сначала не врубился, а потом посмотрел, что ты базовик и понял :)
Выражения
Код: plaintext
var myString = "New York";
и
Код: plaintext
var myString = new String("New York");
идентичны.
Просто String - это один из базовых объектов javascript. Соответственно, конструктор, - new String(). Делая присвоение переменной значения мы неявно его вызываем.
А вобще, javascript в этом смысле - дико гибкий язык. Можно присвоить
Код: plaintext
1.
2.
3.
4.
var myString = new String( 5 );
myString +=  1 ;
alert(myString); //выдаст, соответственно, "51"
myString -=  1 ;
alert(myString); //выдаст уже  50  и тип переменной будет числовой
...
Рейтинг: 0 / 0
скаляр
    #35789695
Фотография alexmsp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruck,
Спасибо. Я в принципе так и предполагал, сомнения возникли после того как почитал дальше, цитирую:
Код: plaintext
1.
var stringA = "My dog has fleas.";
var stringB = new String("My dog has fleas.");
Код: plaintext
stringA =  = stringB
returns true.
Код: plaintext
stringA =  =  = stringB
returns false.

Т.е. здесь говорят, что это не одно и тоже.
Проясни если в теме.

JavaScript & DHTML Cookbook
By Danny Goodman

Publisher : O'Reilly
Pub Date : April 2003
ISBN : 0-596-00467-2
Pages : 540
...
Рейтинг: 0 / 0
скаляр
    #35789702
Фотография alexmsp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО, догоняю.
=== вернет False потому что это разные объекты, так?
...
Рейтинг: 0 / 0
скаляр
    #35789706
Фотография alexmsp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя в этой книге следует в этом случае непонятное пояснение:
авторThese two variables might contain the same series of characters but are different data types. The first is a string value, while the second is an instance of a String object.
...
Рейтинг: 0 / 0
скаляр
    #35789826
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruckА вобще, javascript в этом смысле - дико гибкий язык.
Это ты еще с М-технологиями не имел...
...
Рейтинг: 0 / 0
скаляр
    #35790256
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruck
Код: plaintext
1.
var myString = "New York";
и
Код: plaintext
1.
var myString = new String("New York");
идентичны.
[/src]
Код: plaintext
1.
2.
3.
4.
5.
6.
var
	myString1="New York",
	myString2=new String("New York");

document.write(typeof(myString1)); // string
document.write(typeof(myString2)); // object
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
скаляр
    #35790465
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
100%, никто и не спорит, оператор new - признак того, что создается не примитивный тип, а объект. Возможно, характеристика "идентичны" немного идеализирована, но сути в контексте данного топике не меняет.
Идентичными можно назвать myString1 и myString2.toString(), результатами которых является тип String.

Цитата:
"Когда переменной присваивается строковый литерал, она становится строковой переменной. На самом деле JavaScript не поддерживает строковых типов, а создает стандартный объект string. Таким образом, любая строковая переменная или строковый литерал является объектом string, к которому могут быть применены соответствующие методы этого объекта. Можно явно создать строковый объект, используя ключевое слово new и конструктор string."
...
Рейтинг: 0 / 0
скаляр
    #35790570
Фотография alexmsp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruck-Цитата:На самом деле JavaScript не поддерживает строковых типов, а создает стандартный объект string. Таким образом, любая строковая переменная или строковый литерал является объектом string, к которому могут быть применены соответствующие методы этого объекта.
Запутано, я могу это понять только так что переменные - разных типов, в одном случае строка, во втором объект, но переменная строкового типа становится объектом в момент интерпретации ее как объекта
Код: plaintext
lcString = myString.toLowerCase( );
...
Рейтинг: 0 / 0
скаляр
    #35790594
Фотография Frenzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не надо искать логическое объяснение всему что происходит в яваскрипте )) а людям, которые на нём всерьёз что-то пишут надо давать медаль за отвагу. тут всё надо пробовать - слепо верить ничему нельзя.

дело в том, что "new" по сути глупый оператор. его цель - скопировать прототип из функции, которую ему дали. Т.е. то что вы ему дали String() ещё не значит, что это действительно строковый тип, ведь String() - это просто функция, может вы её заменили на свою.
да и ждать от того, что он побежит сравнивать прототип который ему дали со всеми встроенными типами, тоже не стоит ))

так что просто запомните такое правило - в яваскрипте почти ничего не диктуется какой-то шибко умной задумкой создателей - скорей всего сделали по простому, а оно так получилось случайно )) closures в яваскрипте - ещё один такой пример, так щас люди о нём с деловым видом говорят как о какой-то фиче

_______________________________________
2pro4U
...
Рейтинг: 0 / 0
скаляр
    #35790606
Фотография alexmsp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Frenzy,
тем не менее ИМХО все имеет причины и следствия.
...
Рейтинг: 0 / 0
скаляр
    #35790633
Фотография illion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexmsp,

если решил копать js, то понадобится копательная книжка. На русском языке это только Флэнаган "JavaScript"

Флэнаган
Дело в том, что для каждого из трех базовых типов данных определен соответствующий класс объектов. То есть помимо поддержки числовых, строковых и логических типов данных JavaScript поддерживает классы Number, String и Boolean. Эти классы представляют собой «обертки» для базовых типов данных. Обертка (wrapper) содержит такое же значение базового типа, но кроме этого определяет еще свойства и методы, которые могут использоваться для манипуляций с этим значением.

JavaScript может гибко преобразовывать один тип в другой. Когда мы используем строку в объектном контексте, т. е. когда пытаемся обратиться к свойству или методу строки, JavaScript создает внутри себя объект-обертку для строкового значения. Этот объект String используется вместо базового строкового значения. Для объекта определены свойства и методы, поэтому удается задействовать значение базового типа в объектном контексте.
...бла-бла-бла....
Следует отметить, что объект String, созданный при использовании строки в объектном контексте, временный – он служит для того, чтобы обеспечит доступ к свойству или методу, после чего необходимость в нем отпадает, и поэтому он утилизируется системой.

...бла-бла-бла....

Чтобы явно использовать объект String в своей программе, надо создать постоянный объект, который не будет автоматически удаляться системой. Объекты String создаются так же, как и другие объекты, - с помощью оператора new. Например:

var s = “hello world”; // Значение строкового типа
var S = new String(“Hello World”); // Объект String

Что же можно делать с созданным объектом S типа String? Ничего такого, что нельзя делать с соответствующим значением базового типа. Если мы воспользуемся оператором typeof, он сообщит нам, что S – это объект, а не строковое значение, но кроме того, мы не увидим различий между базовым строковым значением и объектом String. 1 Как мы уже видели, строки автоматически преобразуются в объекты String, когда это требуется. Оказывается, что обратное тоже верно. Когда мы используем объект String там, где предполагается значение базового типа, JavaScript автоматически преобразует объект String в строку. Поэтому, если мы используем наш объект String с оператором +, для выполнения операции конкатенации создается временное значение базового строкового типа:
...бла-бла-бла....

------------------------------
1 Однако при этом метод eval() рассматривает строковые значения и объекты String по-разному, и если непреднамеренно передать ему объект String вместо значения базового строкового типа, он поведет себя не так, как вы предполагаете.
...
Рейтинг: 0 / 0
скаляр
    #35790653
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сначала хотел продолжить полемику, а потом все же решил обратиться к первоисточнику: ECMA-262 .

Вот что пишется по поводу строк и строковых объектов (strings & String objects) (перевод):
ECMA-262...
4.2.1 Объекты
...
Объекты создаются путём использования конструкторов в выражениях new; например, new String("A String") создаёт новый объект String. Вызов конструктора без использования new имеет последствия, зависящие от конструктора. Например, String("A String") создаёт примитивную строку, а не объект.
...
4.3.16 Строковое значение
Строковое значение - элемент типа String, представляющий собой конечную упорядоченную последовательность нуля или более 16-битных беззнаковых целых значений.
...
4.3.17 Тип String
Тип String представляет собой множество всех строковых значений.

4.3.18 Объект String
Объект String является элементом типа Object и экземпляром встроенного объекта String. Объект типа String создаётся при помощи конструктора String в составе выражения new, которому в качестве аргумента передаётся булевское значение. Результирующий объект обладает неявным (безымянным) свойством, содержащим это строковое значение. Объект типа String может быть приведён к строковому значению путём вызова конструктора String как функции (15.5.1).
...
9.8 ToString
Оператор ToString (" к строке") преобразует свой аргумент к значению типа String согласно следующей таблице:

Входной тип Результат
String Возвращает входной аргумент (преобразование не производится)
...
15.5.1 Вызов конструктора String как функции
Когда String вызывается не как конструктор, а как функция, он производит преобразование типа.

15.5.1.1 String([ value ] )
Возвращает строковое значение (не объект String), вычисляемое как ToString(value). Если value не передано, возвращается пустая строка "".
...
Так как прямое присвоение действительно идентично вызову функции ("SQL" === String("SQL")), то согласно а) спецификации, б) постулату javascript, что в нем "все есть объект" и в) простым логическим сопоставлениям можно сделать следующий вывод: при простом присвоении переменной строки создается объект (причем, он либо анонимный, либо изначально присваивается нашей переменной), а затем нашей переменной присваивается внутреннее строковое значение или происходит алгоритм наподобие такого (при str = "our string"):
Код: plaintext
1.
var str = new Object("our string"); // == new String("our string") и typeof(str) == "object"
str = str.toString(); // == ToString(str) и typeof(str) == "string"
То есть неявный вызов конструктора все же должен существовать.

Однако это такие незначительные условности, что на них даже не стоит обращать внимание. Единственное, думаю, это может объяснить природу соответствия казалось бы идентичных строк разным типам.
...
Рейтинг: 0 / 0
скаляр
    #35790658
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
illion,

написал предыдущий пост еще не видя твоего, так что не прийми мой ответ как спор с тобой, просто в верхних постах я вроде как влетел не думая, в чем был обвинен (уже дважды за день), поэтому решил докопаться до истины ...
...
Рейтинг: 0 / 0
скаляр
    #35790696
Фотография illion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruckillion,
написал предыдущий пост еще не видя твоего, так что не прийми мой ответ как спор с тобой
а я чё, я вообще молчу, это господин Флэнаган вещает :-). Я о таких вещах вообще редко задумываюсь, уже пишешь как то на автомате str="hfugvh", и всё тут. Это уже когда кто-то другой задает подобный "странный" вопрос, начинаешь и сам мозгой шевелить :-). У флэнагана в книжке вообще немало таких разъяснений, которые вроде воспринимаешь так на автомате, как должное, типа работает и ладно, а потом почитаешь - "ух ты, вон оказывается что там творится".
...
Рейтинг: 0 / 0
скаляр
    #35792578
Фотография alexmsp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
illion,
сэнкс.
Ищу этого Флэнагана.
До этого накачал книжек на англ, но там типа для чайников, т.е. ничего непонятно
...
Рейтинг: 0 / 0
скаляр
    #35792614
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот и не понял это скульптор или легкоатлет ?
Или тынц давайте, или хотя-бы про кого речь идёт. А то чувствую себя последним идиётом.
...
Рейтинг: 0 / 0
скаляр
    #35792647
Фотография alexmsp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашел я этого Флэнагана. Серьезный парень, 107Мб в pdf:) Наслаждаюсь скачиванием по dial-up.
...
Рейтинг: 0 / 0
скаляр
    #35792668
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSerge
тынц давайте

тынць

/me думает: во время летит - 5-е издание, AJAX, XML...

_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
скаляр
    #35792672
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexmsp
Нашел

тынць?
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
скаляр
    #35792677
Фотография alexmsp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
скаляр
    #35792690
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexmspEx_Soft,

не, здесь тыкать надо
Ога, пасибо, одна порнуха...
...
Рейтинг: 0 / 0
скаляр
    #35792713
Фотография illion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_Soft,

фигасе ты тынц дал! 926р. Тут даже у меня бы жаба проснулась :-). На букс.ру хоть 720. Букс вообще частенько выигрывает по цене, это особенно через findbook.ru видно.
...
Рейтинг: 0 / 0
скаляр
    #35792749
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexmspНашел я этого Флэнагана. Серьезный парень, 107Мб в pdf:) Наслаждаюсь скачиванием по dial-up.
Я так понял, что это разные книги. Эта (pdf на 107Мб) - "JavaScript в примерах", а illion указала на книгу "JavaScript: подробное руководство". Если кто увидит ссылку на электронку последней - маякните, плиз.
...
Рейтинг: 0 / 0
скаляр
    #35792806
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
illion
фигасе ты тынц дал!

да это я дал первый попавшийся - дабы ShSerge свой дуализм заборол ;)
IDVsbruck
Если кто увидит ссылку на электронку последней - маякните

Присовокупляюсь... Хотя... Если честно - не встречал... Ни на одно издание..
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / скаляр
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]