Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / скаляр / 25 сообщений из 27, страница 1 из 2
31.01.2009, 15:10
    #35789594
alexmsp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скаляр
Вычитал в учебнике
Код: plaintext
1.
2.
var myString = "New York";
var lcString = myString.toLowerCase( );
Но это же вроде как скалярный тип,
т.е. опечатка ли это и надо читать как
Код: plaintext
var myString = new String("New York");
?
...
Рейтинг: 0 / 0
31.01.2009, 15:29
    #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
31.01.2009, 17:36
    #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
31.01.2009, 17:44
    #35789702
alexmsp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скаляр
ИМХО, догоняю.
=== вернет False потому что это разные объекты, так?
...
Рейтинг: 0 / 0
31.01.2009, 17:46
    #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
31.01.2009, 21:13
    #35789826
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скаляр
IDVsbruckА вобще, javascript в этом смысле - дико гибкий язык.
Это ты еще с М-технологиями не имел...
...
Рейтинг: 0 / 0
01.02.2009, 15:24
    #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
01.02.2009, 20:56
    #35790465
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скаляр
100%, никто и не спорит, оператор new - признак того, что создается не примитивный тип, а объект. Возможно, характеристика "идентичны" немного идеализирована, но сути в контексте данного топике не меняет.
Идентичными можно назвать myString1 и myString2.toString(), результатами которых является тип String.

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

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

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

_______________________________________
2pro4U
...
Рейтинг: 0 / 0
02.02.2009, 00:16
    #35790606
alexmsp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скаляр
Frenzy,
тем не менее ИМХО все имеет причины и следствия.
...
Рейтинг: 0 / 0
02.02.2009, 01:06
    #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
02.02.2009, 01:40
    #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
02.02.2009, 01:45
    #35790658
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скаляр
illion,

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

тынць

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

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

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

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

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

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

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


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