powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Вопрос по типизации в javascript
25 сообщений из 26, страница 1 из 2
Вопрос по типизации в javascript
    #38682616
morgot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Столкнулся со странной ситуацией. Простой код, нужно проверить существование определенного свойства и вывести, если нет - установить.
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<!doctype html>
<script type="text/javascript">
var name = localStorage.uname;

if (!name)
{
name = prompt("Name?");
localStorage.uname = name;
}
else
{
alert(name);
}
</script>



Тут начинаются странности. Хром выводит значение name как String "undefined". Если проверять на name == undefined, то выходит false. Если проверять на null - такая же ерунда. Чтобы хром попал в условие if , нужно сравнивать со строкой "undefined"

ФФ корректно работает если проверять на null , строки или значения undefined нет.

Интересно, в чем дело и как все таки корректно проверять существование этой переменной?
...
Рейтинг: 0 / 0
Вопрос по типизации в javascript
    #38682625
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
morgot,

есть подозрение, что в какой-то момент ты присвоил в localStorage.uname значение undefined, которое сохранилось как строка "undefined", поскольку localStorage сохраняет только строки, а всё прочее конвертит в строки.
...
Рейтинг: 0 / 0
Вопрос по типизации в javascript
    #38682663
morgot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный Меч,в том то и дело, что ничего не присваивается. браузер чистый, код - только то, что написал в первом посте.
...
Рейтинг: 0 / 0
Вопрос по типизации в javascript
    #38682674
Фотография FishHook
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: javascript
1.
result === undefined


ТРИ знака, это ж джаваскрипт, его наркоманы делали.
...
Рейтинг: 0 / 0
Вопрос по типизации в javascript
    #38682701
The_ShadoW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
morgotСтолкнулся со странной ситуацией.
Я бы вам посоветовал открыть баг на хромотрекере. Это просто сам Хром бредит. Вот результаты небольшого упражнения консолью:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
> var a = null;
undefined
> a
null
> !a
true
> var name = null;
undefined
> name
"null"


У меня эта ситуация ничего, кроме фейспалма, не вызывает. Переменная по имени "name" в любом неймспейсе (даже в локальных переменных, елки зеленые!) всегда оказывается насильно сконверчена в стринг.
...
Рейтинг: 0 / 0
Вопрос по типизации в javascript
    #38682703
The_ShadoW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А нет, вру насчёт "любого неймспейса". Переволновался. Разумеется, оно только в глобальном неймспейсе, который, как известно, window.

Так вот, Хром считает, что window.name обязано быть стрингом. Он тут тоже нифига не прав, разумеется.
...
Рейтинг: 0 / 0
Вопрос по типизации в javascript
    #38682708
The_ShadoW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FishHookТРИ знака, это ж джаваскрипт, его наркоманы делали.
Проверка без приведения типов -- кстати, только для тех слабых людей, которые не могут понять, как работает автоматическое приведение.
...
Рейтинг: 0 / 0
Вопрос по типизации в javascript
    #38682709
Фотография FishHook
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The_ShadoWУ меня эта ситуация ничего, кроме фейспалма, не вызывает
Фейспалм, такой фейспалм. Вы уважаемый, что пытаетесь получить вот этим?
> name
Очевидно, name.toString()
Удивительно, но это строка. Кто ж таким образом проверяет на соответствие типу то!
...
Рейтинг: 0 / 0
Вопрос по типизации в javascript
    #38682710
The_ShadoW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FishHook, пожалуйста, не говорите, что вам в этой теме в первый раз показали браузерную консоль. Не подрывайте мою веру в лучшее. И мою веру в умение других людей читать посты полностью тоже не подрывайте.
...
Рейтинг: 0 / 0
Вопрос по типизации в javascript
    #38682712
Фотография FishHook
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The_ShadoWFishHook, пожалуйста, не говорите, что вам в этой теме в первый раз показали браузерную консоль. Не подрывайте мою веру в лучшее. И мою веру в умение других людей читать посты полностью тоже не подрывайте.
Ну и не несите чушь в массы. Вывод в консоль никоим образом не говорит о типе переменной.
>>>У меня эта ситуация ничего, кроме фейспалма, не вызывает.
Что не нравится то?
...
Рейтинг: 0 / 0
Вопрос по типизации в javascript
    #38682716
The_ShadoW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FishHookНу и не несите чушь в массы. Вывод в консоль никоим образом не говорит о типе переменной.
Я понимаю, что на ПТ не читают, там пишут. Но здесь не ПТ. Рекомендую таки зачесть пост 16233738 полностью.
...
Рейтинг: 0 / 0
Вопрос по типизации в javascript
    #38682783
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The_ShadoWА нет, вру насчёт "любого неймспейса". Переволновался. Разумеется, оно только в глобальном неймспейсе, который, как известно, window.

Так вот, Хром считает, что window.name обязано быть стрингом. Он тут тоже нифига не прав, разумеется.

почему же не прав :) Тут вопрос в том, что нефига называть переменные зарезервированными или уже занятыми именами... window.name - это вполне предопределённое свойство объекта window, которое по сути должно быть строкой... видимо в момент присвоения ему значения оно автоматом конвертируется в строку )) попробуй что-нить кроме name так протолкнуть... например var fpfp :))

P.S. считаю такое поведение правильным и отказоустойчивым... Ведь например с css стилями такая же тема, любое значение автоматом конвертируется в строку, потому что иное и не предусмотрено... Зато работает как часы (в нормальных браузерах). А так я свойству name присвою объект во фрейме... как предлагаете браузеру в последующем с этим управляться? )) Как отправить форму из этого фрейма (или как правильно сказать? через этот фрейм) из родителя?
...
Рейтинг: 0 / 0
Вопрос по типизации в javascript
    #38682809
Фотография FishHook
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А! Я догнал, великий читатель не знал, что у window есть name.
...
Рейтинг: 0 / 0
Вопрос по типизации в javascript
    #38682860
The_ShadoW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёрпочему же не прав :) Тут вопрос в том, что нефига называть переменные зарезервированными или уже занятыми именами...
Простите, но зарезервированные кем и для кого? Может, вы еще и за запрет перегрузки прототипов и заодно и за объявление всех polyfill'ов вне закона (раз нет, то и не должно быть, а то вдруг чо не так пойдёт)?

ПрограмёрА так я свойству name присвою объект во фрейме... как предлагаете браузеру в последующем с этим управляться? ))
Я не очень разрушу вам шаблон, если скажу, что браузеру вообще глубочайше плевать на то, что находится в window? Потому что браузер, за одним-единственным исключением в виде всё того же name, его никогда не читает, а только пишет?
Собственно, window.name -- это единственное свойство у window, имеющее ограниченные эффекты записи в него -- по имени окна можно выставить target у формы или ссылки. Однако за такое использование таргета один фиг надо бить написавшего канделябрами.

ЗЫ: Попробуйте посмотреть, как управляются с этим все браузеры, отличные от Хрома. Подсказка: им плевать. Запишете в name любой не-стринг -- не будет возможности сделать таргет. Всё.

ПрограмёрВедь например с css стилями такая же тема, любое значение автоматом конвертируется в строку, потому что иное и не предусмотрено...
Я вам настоятельно рекомендую подумать хотя бы часок над тем фактом, что CSS относится к модели DOM, а не к яваскрипту. И над всеми следствиями из этого факта.
...
Рейтинг: 0 / 0
Вопрос по типизации в javascript
    #38682864
The_ShadoW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The_ShadoWПопробуйте посмотреть, как управляются с этим все браузеры, отличные от Хрома. Подсказка: им плевать. Запишете в name любой не-стринг -- не будет возможности сделать таргет. Всё.
* -- за исключением, разумеется, случаев перегрузки valueOf() и возврата стринга через него.
...
Рейтинг: 0 / 0
Вопрос по типизации в javascript
    #38682914
st_st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The_ShadoWFishHookТРИ знака, это ж джаваскрипт, его наркоманы делали.
Проверка без приведения типов -- кстати, только для тех слабых людей, которые не могут понять, как работает автоматическое приведение.

Помню уже обсуждали, но повторю примеры.

Кто траву курит, разработчики php или разработчики js?

Код: php
1.
2.
echo (0 == "txt"); // true
echo ("37127371298379127398733" == "37127371298379127398734"); // true



Код: javascript
1.
2.
alert(0 == "txt"); // false
alert("37127371298379127398733" == "37127371298379127398734"); // false



Так форум php-шный сломали (движок) из-за приведения типов, smf-форум кажется, точно не помню уже, видимо разработчики были из тех -
автортолько для тех слабых людей, которые не могут понять, как работает автоматическое приведение или язык позволяет шлёпать дыры на ровном месте.
...
Рейтинг: 0 / 0
Вопрос по типизации в javascript
    #38682934
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 (уже писал ранее в этом сообщении), как размышление над сказанным должно было меня убедить в том, что я неправ?
...
Рейтинг: 0 / 0
Вопрос по типизации в javascript
    #38683078
The_ShadoW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр из спецификации .
Спецификация не является господом богом. Могу лишь напомнить историю прекрасного браузера "Опера", известного (в былые годы) за своё абсолютно буквальное следование всем принятым спецификациям. И его долю, последние годы стабильно находящуюся в области пары процентов. "Делать как все" в настоящее время является куда лучшей де-факто спецификацией. Многие фичи HTML5/CCS3 сейчас так и работают, собственно -- спецификации по ним еще очень далеки от утверждения.

Впрочем, вы убедили меня в том, что открывать Хрому баг в данном случае бесполезно, ответом с высокой вероятностью будет "мы всего лишь совсем-совсем правильно следуем стандартам". На самом деле конечно нет, поскольку у Хрома по этому вопросу никакого "согласья нет" -- ты можешь переопределить, например, navigator и self, но не можешь document и top, ты можешь записать что угодно в outerWidth/Height, но не можешь -- в closed, и т.п. Это ничем не лучше подхода "я так вижу", который проповедовался в ИЕ6.
...
Рейтинг: 0 / 0
Вопрос по типизации в javascript
    #38683079
The_ShadoW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати да, вы, надеюсь, когда ссылки давали -- вообще разглядели, что спецификация с 2006 года лежит в состоянии working draft, и всем на неё плевать?
...
Рейтинг: 0 / 0
Вопрос по типизации в javascript
    #38683091
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а мораль сей басни - не надо срать в глобальном пространстве имён
...
Рейтинг: 0 / 0
Вопрос по типизации в javascript
    #38683094
Фотография Малыхин Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропила мораль сей басни - не надо срать в глобальном пространстве имён
+10500 =)
И не стоит забывать что там может быть уже насрано без вас =)
...
Рейтинг: 0 / 0
Вопрос по типизации в javascript
    #38683100
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The_ShadoW,

Ну никто же не запрещает пиплу разрабатывать что-то новое. :) Это как работа по договору (ТЗ). Есть чётко определённые пункты, которым надо следовать, а всё остальное - на усмотрение исполнителя. Никто же не обидится, если кто-то закажет у вас игрушку 2d, а вы ему крутую 3d отдадите за те же деньги. Главное, что бы у неё был доступен пункт (двухмерная). Иначе получится так, что у пользователя 3д ускорителя нету и всё)))

Тут по аналогии... Есть то, чему надо следовать, а есть то, чем можно и выделяться среди других.
...
Рейтинг: 0 / 0
Вопрос по типизации в javascript
    #38683166
The_ShadoW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропила мораль сей басни - не надо срать в глобальном пространстве имён
А вот это бесспорно. Хоть в JS и можно порой так креативно стрелять себе в ногу, что это еще и в продакшне можно где-то использовать, залезание в глобал неймспейс к этому не относится.
...
Рейтинг: 0 / 0
Вопрос по типизации в javascript
    #38683216
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
топикстартер то понял, что ему делать?
...
Рейтинг: 0 / 0
Вопрос по типизации в javascript
    #38683398
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилтопикстартер то понял, что ему делать?

Код: javascript
1.
2.
3.
4.
(function(){
  var name;
  //код
})()



тут всё просто вроде)
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Вопрос по типизации в javascript
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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