|
|
|
Вопрос по типизации в javascript
|
|||
|---|---|---|---|
|
#18+
Столкнулся со странной ситуацией. Простой код, нужно проверить существование определенного свойства и вывести, если нет - установить. Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Тут начинаются странности. Хром выводит значение name как String "undefined". Если проверять на name == undefined, то выходит false. Если проверять на null - такая же ерунда. Чтобы хром попал в условие if , нужно сравнивать со строкой "undefined" ФФ корректно работает если проверять на null , строки или значения undefined нет. Интересно, в чем дело и как все таки корректно проверять существование этой переменной? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2014, 16:18 |
|
||
|
Вопрос по типизации в javascript
|
|||
|---|---|---|---|
|
#18+
morgot, есть подозрение, что в какой-то момент ты присвоил в localStorage.uname значение undefined, которое сохранилось как строка "undefined", поскольку localStorage сохраняет только строки, а всё прочее конвертит в строки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2014, 16:42 |
|
||
|
Вопрос по типизации в javascript
|
|||
|---|---|---|---|
|
#18+
Яростный Меч,в том то и дело, что ничего не присваивается. браузер чистый, код - только то, что написал в первом посте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2014, 17:46 |
|
||
|
Вопрос по типизации в javascript
|
|||
|---|---|---|---|
|
#18+
Код: javascript 1. ТРИ знака, это ж джаваскрипт, его наркоманы делали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2014, 18:05 |
|
||
|
Вопрос по типизации в javascript
|
|||
|---|---|---|---|
|
#18+
morgotСтолкнулся со странной ситуацией. Я бы вам посоветовал открыть баг на хромотрекере. Это просто сам Хром бредит. Вот результаты небольшого упражнения консолью: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. У меня эта ситуация ничего, кроме фейспалма, не вызывает. Переменная по имени "name" в любом неймспейсе (даже в локальных переменных, елки зеленые!) всегда оказывается насильно сконверчена в стринг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2014, 19:14 |
|
||
|
Вопрос по типизации в javascript
|
|||
|---|---|---|---|
|
#18+
А нет, вру насчёт "любого неймспейса". Переволновался. Разумеется, оно только в глобальном неймспейсе, который, как известно, window. Так вот, Хром считает, что window.name обязано быть стрингом. Он тут тоже нифига не прав, разумеется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2014, 19:18 |
|
||
|
Вопрос по типизации в javascript
|
|||
|---|---|---|---|
|
#18+
FishHookТРИ знака, это ж джаваскрипт, его наркоманы делали. Проверка без приведения типов -- кстати, только для тех слабых людей, которые не могут понять, как работает автоматическое приведение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2014, 19:27 |
|
||
|
Вопрос по типизации в javascript
|
|||
|---|---|---|---|
|
#18+
The_ShadoWУ меня эта ситуация ничего, кроме фейспалма, не вызывает Фейспалм, такой фейспалм. Вы уважаемый, что пытаетесь получить вот этим? > name Очевидно, name.toString() Удивительно, но это строка. Кто ж таким образом проверяет на соответствие типу то! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2014, 19:27 |
|
||
|
Вопрос по типизации в javascript
|
|||
|---|---|---|---|
|
#18+
FishHook, пожалуйста, не говорите, что вам в этой теме в первый раз показали браузерную консоль. Не подрывайте мою веру в лучшее. И мою веру в умение других людей читать посты полностью тоже не подрывайте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2014, 19:29 |
|
||
|
Вопрос по типизации в javascript
|
|||
|---|---|---|---|
|
#18+
The_ShadoWFishHook, пожалуйста, не говорите, что вам в этой теме в первый раз показали браузерную консоль. Не подрывайте мою веру в лучшее. И мою веру в умение других людей читать посты полностью тоже не подрывайте. Ну и не несите чушь в массы. Вывод в консоль никоим образом не говорит о типе переменной. >>>У меня эта ситуация ничего, кроме фейспалма, не вызывает. Что не нравится то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2014, 19:34 |
|
||
|
Вопрос по типизации в javascript
|
|||
|---|---|---|---|
|
#18+
FishHookНу и не несите чушь в массы. Вывод в консоль никоим образом не говорит о типе переменной. Я понимаю, что на ПТ не читают, там пишут. Но здесь не ПТ. Рекомендую таки зачесть пост 16233738 полностью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2014, 19:41 |
|
||
|
Вопрос по типизации в javascript
|
|||
|---|---|---|---|
|
#18+
The_ShadoWА нет, вру насчёт "любого неймспейса". Переволновался. Разумеется, оно только в глобальном неймспейсе, который, как известно, window. Так вот, Хром считает, что window.name обязано быть стрингом. Он тут тоже нифига не прав, разумеется. почему же не прав :) Тут вопрос в том, что нефига называть переменные зарезервированными или уже занятыми именами... window.name - это вполне предопределённое свойство объекта window, которое по сути должно быть строкой... видимо в момент присвоения ему значения оно автоматом конвертируется в строку )) попробуй что-нить кроме name так протолкнуть... например var fpfp :)) P.S. считаю такое поведение правильным и отказоустойчивым... Ведь например с css стилями такая же тема, любое значение автоматом конвертируется в строку, потому что иное и не предусмотрено... Зато работает как часы (в нормальных браузерах). А так я свойству name присвою объект во фрейме... как предлагаете браузеру в последующем с этим управляться? )) Как отправить форму из этого фрейма (или как правильно сказать? через этот фрейм) из родителя? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2014, 22:32 |
|
||
|
Вопрос по типизации в javascript
|
|||
|---|---|---|---|
|
#18+
А! Я догнал, великий читатель не знал, что у window есть name. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2014, 23:22 |
|
||
|
Вопрос по типизации в javascript
|
|||
|---|---|---|---|
|
#18+
Програмёрпочему же не прав :) Тут вопрос в том, что нефига называть переменные зарезервированными или уже занятыми именами... Простите, но зарезервированные кем и для кого? Может, вы еще и за запрет перегрузки прототипов и заодно и за объявление всех polyfill'ов вне закона (раз нет, то и не должно быть, а то вдруг чо не так пойдёт)? ПрограмёрА так я свойству name присвою объект во фрейме... как предлагаете браузеру в последующем с этим управляться? )) Я не очень разрушу вам шаблон, если скажу, что браузеру вообще глубочайше плевать на то, что находится в window? Потому что браузер, за одним-единственным исключением в виде всё того же name, его никогда не читает, а только пишет? Собственно, window.name -- это единственное свойство у window, имеющее ограниченные эффекты записи в него -- по имени окна можно выставить target у формы или ссылки. Однако за такое использование таргета один фиг надо бить написавшего канделябрами. ЗЫ: Попробуйте посмотреть, как управляются с этим все браузеры, отличные от Хрома. Подсказка: им плевать. Запишете в name любой не-стринг -- не будет возможности сделать таргет. Всё. ПрограмёрВедь например с css стилями такая же тема, любое значение автоматом конвертируется в строку, потому что иное и не предусмотрено... Я вам настоятельно рекомендую подумать хотя бы часок над тем фактом, что CSS относится к модели DOM, а не к яваскрипту. И над всеми следствиями из этого факта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2014, 01:14 |
|
||
|
Вопрос по типизации в javascript
|
|||
|---|---|---|---|
|
#18+
The_ShadoWПопробуйте посмотреть, как управляются с этим все браузеры, отличные от Хрома. Подсказка: им плевать. Запишете в name любой не-стринг -- не будет возможности сделать таргет. Всё. * -- за исключением, разумеется, случаев перегрузки valueOf() и возврата стринга через него. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2014, 01:18 |
|
||
|
Вопрос по типизации в javascript
|
|||
|---|---|---|---|
|
#18+
The_ShadoWFishHookТРИ знака, это ж джаваскрипт, его наркоманы делали. Проверка без приведения типов -- кстати, только для тех слабых людей, которые не могут понять, как работает автоматическое приведение. Помню уже обсуждали, но повторю примеры. Кто траву курит, разработчики php или разработчики js? Код: php 1. 2. Код: javascript 1. 2. Так форум php-шный сломали (движок) из-за приведения типов, smf-форум кажется, точно не помню уже, видимо разработчики были из тех - автортолько для тех слабых людей, которые не могут понять, как работает автоматическое приведение или язык позволяет шлёпать дыры на ровном месте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2014, 06:52 |
|
||
|
Вопрос по типизации в javascript
|
|||
|---|---|---|---|
|
#18+
The_ShadoWПрограмёрпочему же не прав :) Тут вопрос в том, что нефига называть переменные зарезервированными или уже занятыми именами... Простите, но зарезервированные кем и для кого? Может, вы еще и за запрет перегрузки прототипов и заодно и за объявление всех polyfill'ов вне закона (раз нет, то и не должно быть, а то вдруг чо не так пойдёт)? ПрограмёрА так я свойству name присвою объект во фрейме... как предлагаете браузеру в последующем с этим управляться? )) Я не очень разрушу вам шаблон, если скажу, что браузеру вообще глубочайше плевать на то, что находится в window? Потому что браузер, за одним-единственным исключением в виде всё того же name, его никогда не читает, а только пишет? Собственно, window.name -- это единственное свойство у window, имеющее ограниченные эффекты записи в него -- по имени окна можно выставить target у формы или ссылки. Однако за такое использование таргета один фиг надо бить написавшего канделябрами. ЗЫ: Попробуйте посмотреть, как управляются с этим все браузеры, отличные от Хрома. Подсказка: им плевать. Запишете в name любой не-стринг -- не будет возможности сделать таргет. Всё. ПрограмёрВедь например с css стилями такая же тема, любое значение автоматом конвертируется в строку, потому что иное и не предусмотрено... Я вам настоятельно рекомендую подумать хотя бы часок над тем фактом, что CSS относится к модели DOM, а не к яваскрипту. И над всеми следствиями из этого факта. из спецификации . Как видим в спецификации чётко прописано, что name имеет тип dom::DOMString . Потому как я говорил, я вижу это поведение правильным и, как оказалось, уже стандартизированным. Любое другое поведение является неправильным, а то что ты напридумывал, даже не знаю стоит ли обсуждать, учитывая что ты заведомо неправ. Кратко по 3 утверждениям из цитаты. 1. Ну тогда давай свои переменные забахаем под названием typeof, instanceof и object? А почему бы нет? :) (только вот js при попытке это сделать сразу пошлёт и будет прав). 2. На то есть спецификация и заранее определённые интерфейсы. Браузеру то может и наплевать, да только программисту не наплевать. Вспомни возню при вёрстке для IE6. А ведь этому браузеру тоже наплевать на всё, что в стандарте написано... только страдает от этого отнюдь не мелкософт, а именно верстальщик. 3. Следствие... хм )) Учитывая происхождение свойства name у window (уже писал ранее в этом сообщении), как размышление над сказанным должно было меня убедить в том, что я неправ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2014, 10:24 |
|
||
|
Вопрос по типизации в javascript
|
|||
|---|---|---|---|
|
#18+
Програмёр из спецификации . Спецификация не является господом богом. Могу лишь напомнить историю прекрасного браузера "Опера", известного (в былые годы) за своё абсолютно буквальное следование всем принятым спецификациям. И его долю, последние годы стабильно находящуюся в области пары процентов. "Делать как все" в настоящее время является куда лучшей де-факто спецификацией. Многие фичи HTML5/CCS3 сейчас так и работают, собственно -- спецификации по ним еще очень далеки от утверждения. Впрочем, вы убедили меня в том, что открывать Хрому баг в данном случае бесполезно, ответом с высокой вероятностью будет "мы всего лишь совсем-совсем правильно следуем стандартам". На самом деле конечно нет, поскольку у Хрома по этому вопросу никакого "согласья нет" -- ты можешь переопределить, например, navigator и self, но не можешь document и top, ты можешь записать что угодно в outerWidth/Height, но не можешь -- в closed, и т.п. Это ничем не лучше подхода "я так вижу", который проповедовался в ИЕ6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2014, 16:43 |
|
||
|
Вопрос по типизации в javascript
|
|||
|---|---|---|---|
|
#18+
Кстати да, вы, надеюсь, когда ссылки давали -- вообще разглядели, что спецификация с 2006 года лежит в состоянии working draft, и всем на неё плевать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2014, 16:46 |
|
||
|
Вопрос по типизации в javascript
|
|||
|---|---|---|---|
|
#18+
а мораль сей басни - не надо срать в глобальном пространстве имён ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2014, 17:34 |
|
||
|
Вопрос по типизации в javascript
|
|||
|---|---|---|---|
|
#18+
Изопропила мораль сей басни - не надо срать в глобальном пространстве имён +10500 =) И не стоит забывать что там может быть уже насрано без вас =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2014, 17:39 |
|
||
|
Вопрос по типизации в javascript
|
|||
|---|---|---|---|
|
#18+
The_ShadoW, Ну никто же не запрещает пиплу разрабатывать что-то новое. :) Это как работа по договору (ТЗ). Есть чётко определённые пункты, которым надо следовать, а всё остальное - на усмотрение исполнителя. Никто же не обидится, если кто-то закажет у вас игрушку 2d, а вы ему крутую 3d отдадите за те же деньги. Главное, что бы у неё был доступен пункт (двухмерная). Иначе получится так, что у пользователя 3д ускорителя нету и всё))) Тут по аналогии... Есть то, чему надо следовать, а есть то, чем можно и выделяться среди других. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2014, 18:02 |
|
||
|
Вопрос по типизации в javascript
|
|||
|---|---|---|---|
|
#18+
Изопропила мораль сей басни - не надо срать в глобальном пространстве имён А вот это бесспорно. Хоть в JS и можно порой так креативно стрелять себе в ногу, что это еще и в продакшне можно где-то использовать, залезание в глобал неймспейс к этому не относится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2014, 20:30 |
|
||
|
Вопрос по типизации в javascript
|
|||
|---|---|---|---|
|
#18+
топикстартер то понял, что ему делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2014, 22:57 |
|
||
|
|

start [/forum/topic.php?fid=22&msg=38683100&tid=1446936]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
151ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 197ms |
| total: | 445ms |

| 0 / 0 |
