Jump to content

Wat


buddah
 Share

Recommended Posts

Кстати, я заметил, над этим роликом многие ржут. Я к сожалению не понимаю инглиш вообще, поэтому не могу высказать своё мнение, но запомню его, когда выучу английский, послушаю, скажу)

Там первая строчка - то что вводится, вторая, то что получаем на выходе. Вот над тем, что на выходе все и смеются.

Link to comment
Share on other sites

хммм, не знаю, а что еще может быть из {}+{}, кроме как NaN?

Хорошо, опишите мне тогда, пожалуйста, всю цепочку преобразования

Предположу что происходит следующее:


ToNumber({}.toString) + ToNumber({}.toString)
=>
NaN + NaN
=>
NaN

Link to comment
Share on other sites

buddah, а я разве кого-то обзывал, оскорблял, унижал?? Нет.

Да и что такое ЧСВ твое?

А ты здесь при чем?) Не парься) Если бы вы со мной разговаривали в реале, то я бы посмеивался и никто никогда не заподозрил бы во мне обиды. Интернет такой интернет. Здесь не видно эмоций)

Чувство Собственной Важности.

Когда умный человек (в данном случае s0rr0w, в профессиональности коего я ничуть не сомневаюсь) показывает свою осведомленность в том или ином предмете с юмором или даже сарказмом - это красиво и смешно.

Но когда он бухтит, то это просто занудство и ничего больше.

На счет детей - все мужчины остаются детьми на всю жизнь, только у некоторых хватает смелости это признавать.

Ладно, чего уж там. Занудство среди умных людей процветает, к этому надо привыкнуть.

Edited by buddah
Link to comment
Share on other sites

Ах ну да...{}+{}...NaN очень логично..простите...

Простите, а как вы представляете себе процесс сложения объектов

{ x: 1 } + { x: 2 }

Вы хотите получить: { x: 3 } или { x: 2 } или NaN ?

Лично я хочу получить NaN, потому что undefined + undefined = NaN

  • Like 1
Link to comment
Share on other sites

Когда умный человек (в данном случае s0rr0w, в профессиональности коего я ничуть не сомневаюсь) показывает свою осведомленность в том или ином предмете с юмором или даже сарказмом - это красиво и смешно.

Но когда он бухтит, то это просто занудство и ничего больше.

Я смотрю, интерес к теме разгорается..

Я "бухтел" только потому, что иногда люди смеются над собственной глупостью. Но только сейчас начали задумываться над тем, а почему так?

Чуть позже выложу всю цепочку, потому что она длинная и витиеватая

А почему undefined? Не может быть безымянного объекта?

alert({}); // [object Object]

Или я че-то не догоняю?

alert приводит объект к строке. А getValue объекта с приведением к строке будет как раз [object Object]

Напиши в дебаггере просто {} //undefined

Link to comment
Share on other sites

Кстати, я заметил, над этим роликом многие ржут. Я к сожалению не понимаю инглиш вообще, поэтому не могу высказать своё мнение, но запомню его, когда выучу английский, послушаю, скажу)

Там первая строчка - то что вводится, вторая, то что получаем на выходе. Вот над тем, что на выходе все и смеются.

Спасибо, Оксан :boast:

Link to comment
Share on other sites

Я это приводил лишь к тому, что вы воспринимаете язык как аксиому, а удобен ли действительно такой результат и логично ли такое преобразование вам не важно, вы знаете спецификацию и поведение различных языковых конструкций. Язык составляется людьми и не стоит на месте, развивается. Почему так сложно сходу ответить правильную цепочку преобразования...да потому, что она не так тривиальна и интуитивна, и разительно меняется от контекста, а так не должно быть. Я пока изучаю JavaScript сталкивался и авторы учебных материалов не скрывают, что поведение некоторых конструкций определенно не такое какое ожидается, а все из-за некоторой специфичности самого языка, и такое наблюдается не только в JavaScript.

alexriz, ничего личного, но почему, если для вас так очевиден NaN вы проигнорировали мою просьбу и так не ответили вопрос?

Link to comment
Share on other sites

s0rr0w, Кстати, выходит строка при сложении объектов http://jsfiddle.net/N3gtW/

А при чём тут NaN? :unsure:

alert не явно вызывает метод toString

Да это я понял. Я просто хочу понять, откуда они взяли NaN? Если результат конкатенации строк будет строка.

Link to comment
Share on other sites

хмм, вообще-то да, вот что получается в дебагере


var a = {x:1, y:2};
undefined
a
Object
var b = {x:3, y:4};
undefined
b
Object
a+b
"[object Object][object Object]"

{x:1}
1
{x:2}
2
{x:1}+{x:2}
NaN

{x:1, y:2}
SyntaxError: Unexpected token :

alexriz, ничего личного, но почему, если для вас так очевиден NaN вы проигнорировали мою просьбу и так не ответили вопрос?

Не переживайте, теперь и я что-то не понимаю

Edited by alexriz
Link to comment
Share on other sites

psywalker,

Ты просто в консоли фаербага набери {} + {}

Да, я уже увидел, но почему так? И чем это отличается от обычного сложения? Ведь в обоих случаях приводиться к строке объекты и складываются?

Link to comment
Share on other sites

Уф, ну если не смешно, то хотя бы вам интересно разбираться в цепочке преобразований и т.д) Значит тема была создана не зря)

Да, присоединяйся или даже конкатенируйся в нашу строку :D

Link to comment
Share on other sites

Ха, я тоже ошибался...

В выражении {} + {} первый элемент блок (!), а второй инициализатор объекта

Разрыв шаблона

{ var x = 1; var z=1 } + { x: 1, y:2 }

Результат вычисления блока undefined складываем со строкой и получаем NaN

  • Like 1
Link to comment
Share on other sites

А я сижу и думаю, что подозрительно как-то

{x:1, y:2}

SyntaxError: Unexpected token :

А делал так

{x = 1; y = 2;}

то возвращало 2

Тоже подозревал что блок, но думал может, я ошибаюсь и в js не так

Link to comment
Share on other sites

И снова ошибся :blush:

{} + {} не сложение блока и объекта, это просто блок и +n

{} + [] не сложение блока и массива, +[] приводится к +toNumber(getValue([]))

[] + {} а это сложение двух строк "" и "[object Object]"

  • Like 1
Link to comment
Share on other sites

Доклад не звучал, как недоумение «как такое может быть?!». Автор доклада понимал каждое действие, которое он делал и понимал, что должно произойти. Суть доклада — показать, что эти моменты — это баг. А вы их объяснили, и сделали из них фичу.

Но, это не то поведение, которое ожидает увидеть программист в нормальном стандартном языке программирования. По этому, это все же баг.

Не ради холивара: сами гуру джаваскрипта понимают, что язык не очень выразителен и логичен, но альтернатив пока нету (CoffeeScript не считается).

Фух, там нашелся человек, который лучше выражает мои мысли, чем я сам) Только я не считаю, что нужно обязательно искать альтернативу, мне JavaScript многим импонирует, его просто нужно развивать.

P/s касательно ссылки на хабр

Edited by Svatov
  • Like 2
Link to comment
Share on other sites

Ну и почему эти моменты - баг? Что, по-вашему, должно получаться при сложении двух объектов? А при сложении блока с объектом? Как по мне даже NaN не круто - круто было бы выдавать fatal error и слать юзера куда подальше.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share


×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy