Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

элемент строки (dimagolov)
Author Message
dimagolov
Участник форума



Joined: 04 Feb 2007
Posts: 1664
Карма: 96
   поощрить/наказать

Location: Christ Church, Barbados

PostPosted: Thu Mar 05, 2009 9:57 pm (написано за 2 минуты 11 секунд)
   Post subject: элемент строки
Reply with quote

Code (JavaScript): скопировать код в буфер обмена
var test= "This is a test";
alert (typeof test[0]);
чье поведение правильнее? IE который говорит udefined или все остальные, которые как результат test[0] отдают строку "T"?
Back to top
View user's profile Send private message
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Thu Mar 05, 2009 10:52 pm (спустя 54 минуты; написано за 49 секунд)
   Post subject:
Reply with quote

dimagolov
Я за остальные браузеры. Но по-моему, в стандарте JavaScript действительно нигде не прописано, что строка должна обрабатываться как массив символов.
Back to top
View user's profile Send private message Send e-mail
dimagolov
Участник форума



Joined: 04 Feb 2007
Posts: 1664
Карма: 96
   поощрить/наказать

Location: Christ Church, Barbados

PostPosted: Thu Mar 05, 2009 10:57 pm (спустя 4 минуты; написано за 4 минуты 5 секунд)
   Post subject:
Reply with quote

это я тему создал, потому что у меня глюк появился в FF win из-за того, что я на такое не расчитывал. А вот Safari Mac работал без проблем, но данный тест на нем все равно дает строку. Фишка в том, что строка была не простая, а полученная как результат работы ф-ии апплета, может по этому как массив не обрабатывалось там. А FF, заразе, оказалось пофиг и получил очень неприятный баг в самый неподходящий момент.

п.с. я уже этот код прибил нафиг, так как это была обратная совместимость со старой версией апплета которая возвращала массив строк. Но так как Safari (вернее JRE плагин к нему) упорно понимать такое не хотел, то пришлось сериализовать массив и возвращать его в строке, которой потом делать eval.
Back to top
View user's profile Send private message
Александр Михалицын
Модератор



Joined: 23 May 2008
Posts: 1299
Карма: 83
   поощрить/наказать


PostPosted: Fri Mar 06, 2009 12:11 pm (спустя 13 часов 13 минут; написано за 30 секунд)
   Post subject:
Reply with quote

dimagolov,
тоже за остальные... Строка все таки массив чаров. :) Это уже из других языков видимо тянется...
Back to top
View user's profile Send private message Send e-mail
dimagolov
Участник форума



Joined: 04 Feb 2007
Posts: 1664
Карма: 96
   поощрить/наказать

Location: Christ Church, Barbados

PostPosted: Fri Mar 06, 2009 3:44 pm (спустя 3 часа 33 минуты)
   Post subject:
Reply with quote

провел небольшое тестирование. где удалось протестировать под виндой все (IE, FF3, GoogleChrome) JS получают объект типа string когда апплет возвращает Java тип String. А вот на маке Safari JS получает объект типа object, поэтому [0] у него был не определен, как и в IE. Safari под вин у меня отказались давать привилегии апплету и поэтому проверить не удалось.

п.с. [offtopic] какой же все-таки это зоопарк java плагины к браузером. каждый так и норовит выкинуть свой конык, поэтому даже под одной платформой одинаковое поведение апплета возможно в очень ограниченном наборе вариантов взаимодействия.
Back to top
View user's profile Send private message
dimagolov
Участник форума



Joined: 04 Feb 2007
Posts: 1664
Карма: 96
   поощрить/наказать

Location: Christ Church, Barbados

PostPosted: Fri Mar 06, 2009 4:00 pm (спустя 15 минут; написано за 1 минуту 38 секунд)
   Post subject:
Reply with quote

Александр Михалицын wrote:
dimagolov,
тоже за остальные... Строка все таки массив чаров. :) Это уже из других языков видимо тянется...
только в JS char-ов нету и srt[0] это новая строка с одним символом в ней. так что ИМХО нифига не логично.
Back to top
View user's profile Send private message
Ex_Soft
Участник форума



Joined: 28 Apr 2005
Posts: 138
Карма: -4
   поощрить/наказать


PostPosted: Sun Mar 29, 2009 12:54 pm (спустя 22 дня 20 часов 54 минуты; написано за 3 минуты 51 секунду)
   Post subject:
Reply with quote

dimagolov wrote:
Code (JavaScript): скопировать код в буфер обмена
var test= "This is a test";
alert (typeof test[0]);
IE который говорит udefined
M$ IE (по крайней мере до M$ IE 6.0.2800.1106+SP1) вообще не знает, что такое
Code (JavaScript): скопировать код в буфер обмена
test[0]
Code (JavaScript): скопировать код в буфер обмена
var test="This is a test";
alert(test[0]);
charAt кросс'browser'но...
Back to top
View user's profile Send private message
dimagolov
Участник форума



Joined: 04 Feb 2007
Posts: 1664
Карма: 96
   поощрить/наказать

Location: Christ Church, Barbados

PostPosted: Sun Mar 29, 2009 5:27 pm (спустя 4 часа 33 минуты; написано за 1 минуту 10 секунд)
   Post subject:
Reply with quote

Ex_Soft, тот факт, что M$ IE не знает что такое test[0] как раз и выражается выражением typeof test[0] === 'undefined' :)
Back to top
View user's profile Send private message
Zeroglif
Участник форума



Joined: 02 Jan 2006
Posts: 293
Карма: 61
   поощрить/наказать


PostPosted: Mon Mar 30, 2009 9:19 pm (спустя 1 день 3 часа 52 минуты; написано за 58 секунд)
   Post subject:
Reply with quote

В предыдущем сообщении забыл ответить на сам вопрос. Поведение IE правильнее. ;)
Back to top
View user's profile Send private message
Александр Михалицын
Модератор



Joined: 23 May 2008
Posts: 1299
Карма: 83
   поощрить/наказать


PostPosted: Tue Mar 31, 2009 8:20 am (спустя 11 часов 56 секунд)
   Post subject:
Reply with quote


М

Ветка выделена в отдельную тему «Про "софистику" и про то, как определить наличие свойства у объекта. :)»,
расположенную в форуме Мусоропровод (31 Марта 2009, 11:20).
Back to top
View user's profile Send private message Send e-mail
Ex_Soft
Участник форума



Joined: 28 Apr 2005
Posts: 138
Карма: -4
   поощрить/наказать


PostPosted: Tue Mar 31, 2009 11:37 am (спустя 3 часа 17 минут; написано за 2 минуты 34 секунды)
   Post subject:
Reply with quote

А меня, после естественного поведения в Mozilla, M$ IE удивил - я за остальные browser'ы...
Back to top
View user's profile Send private message
Zeroglif
Участник форума



Joined: 02 Jan 2006
Posts: 293
Карма: 61
   поощрить/наказать


PostPosted: Tue Mar 31, 2009 12:21 pm (спустя 43 минуты; написано за 3 минуты 15 секунд)
   Post subject:
Reply with quote

Если нормальная яваскриптовая ветка ни за что отправлена в мусоропровод, то зачем тогда и сообщения удалять? Было несколько комментариев по работе 'typeof', связанные с темой.
Back to top
View user's profile Send private message
Ex_Soft
Участник форума



Joined: 28 Apr 2005
Posts: 138
Карма: -4
   поощрить/наказать


PostPosted: Tue Mar 31, 2009 12:38 pm (спустя 16 минут; написано за 2 минуты 58 секунд)
   Post subject:
Reply with quote

Zeroglif wrote:
Было несколько комментариев по работе 'typeof', связанные с темой.
Вы об
Quote:
Если бы было так, как вы описываете, то (typeof несуществующийИдентификатор) выбросил бы вам ошибку. Операндом является выражение, а уже непосредственно в рамках работы оператора происходит вычисление этого выражения, получение значения (если нужно), анализ значения на принадлежность типу. (forum.dklab.ru/viewtopic.php?p=168672#168672)
?
Не соглашусь с Вами: в начале все вычисляется, а потом уж передается на вход operator typeof(parameter) (если уж проводить аналогию с другими языками)
Back to top
View user's profile Send private message
Александр Михалицын
Модератор



Joined: 23 May 2008
Posts: 1299
Карма: 83
   поощрить/наказать


PostPosted: Tue Mar 31, 2009 12:40 pm (спустя 1 минуту 46 секунд; написано за 44 секунды)
   Post subject:
Reply with quote

Zeroglif,

Сообщение от гостя:
Quote:
Ex_Soft wrote:
В начале вычисляется test[0], а, уж, затем результат этого вычисления передается в качестве операнда оператору typeof. Сиречь M$ IE пытаецо взять typeof undefined.
Если бы было так, как вы описываете, то (typeof несуществующийИдентификатор) выбросил бы вам ошибку. Операндом является выражение, а уже непосредственно в рамках работы оператора происходит вычисление этого выражения, получение значения (если нужно), анализ значения на принадлежность типу.
остальное там про софистику и пр. :)

P.S. И правда, чекбокс лишний поставил. ;)
Back to top
View user's profile Send private message Send e-mail
Zeroglif
Участник форума



Joined: 02 Jan 2006
Posts: 293
Карма: 61
   поощрить/наказать


PostPosted: Tue Mar 31, 2009 1:23 pm (спустя 43 минуты; написано за 1 минуту 26 секунд)
   Post subject:
Reply with quote

Ex_Soft wrote:
в начале все вычисляется, а потом уж передается на вход
Как вы тогда себе объясните то, что несуществующий идентификатор, допустим, typeof(XXX) вычисляется без ошибок, а alert(XXX) с ошибкой?
Back to top
View user's profile Send private message
Ex_Soft
Участник форума



Joined: 28 Apr 2005
Posts: 138
Карма: -4
   поощрить/наказать


PostPosted: Tue Mar 31, 2009 2:01 pm (спустя 37 минут; написано за 1 минуту)
   Post subject:
Reply with quote

Наверное тем, что для typeof операндом является тип, а для alert - значение.
Back to top
View user's profile Send private message
Zeroglif
Участник форума



Joined: 02 Jan 2006
Posts: 293
Карма: 61
   поощрить/наказать


PostPosted: Tue Mar 31, 2009 2:10 pm (спустя 8 минут; написано за 2 минуты 34 секунды)
   Post subject:
Reply with quote

1.4.3 The typeof Operator

    The production UnaryExpression : typeof UnaryExpression is evaluated as follows:

    1. Evaluate UnaryExpression. (вычисляется выражение, на значение пока плевать)

    2. If Type(Result(1)) is not Reference, go to step 4. (если не свойство (литерал), то получить значение)

    3. If GetBase(Result(1)) is null, return "undefined". (если свойство вообще не найдено, то НЕ ПОЛУЧАТЬ значение)

    4. Call GetValue(Result(1)). (получить значение)

    5. Return a string determined by Type(Result(4)) according to the following table:
Back to top
View user's profile Send private message
Ex_Soft
Участник форума



Joined: 28 Apr 2005
Posts: 138
Карма: -4
   поощрить/наказать


PostPosted: Tue Mar 31, 2009 2:34 pm (спустя 23 минуты; написано за 1 минуту 16 секунд)
   Post subject:
Reply with quote

А ссылочку на первоисточник можно? А то
MDC Core JavaScript 1.5 Reference wrote:
The typeof operator returns a string indicating the type of the unevaluated operand. (developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Special_Operators/typeof_Operator)
Back to top
View user's profile Send private message
Zeroglif
Участник форума



Joined: 02 Jan 2006
Posts: 293
Карма: 61
   поощрить/наказать


PostPosted: Tue Mar 31, 2009 6:02 pm (спустя 3 часа 28 минут; написано за 34 секунды)
   Post subject:
Reply with quote

Ex_Soft

Вот вы дали ссылку, там в самом низу есть первоисточник. ;)
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML