Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   wtf javascript (https://javascript.ru/forum/offtopic/22405-wtf-javascript.html)

vflash 18.10.2011 13:33

wtf javascript
 
просто нет слов. мож кто объяснить зачем они так сделали ?

var m = [23,,,,45];
alert(m.indexOf(m[1]));

Kolyaj 18.10.2011 13:36

Как так?

По примеру: первого элемента в массиве не существует, поэтому m[1] == undefined. Но ни одно undefined в массиве нет.

var m = [23,,,undefined,45];
alert(m.indexOf(m[1]));

vflash 18.10.2011 13:50

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

Kolyaj 18.10.2011 14:16

Потому что массив в JavaScript-е не то же самое, что массив в PHP, и уж тем более не то же самое, что массив в Си.

http://alljs.ru/articles/array/whatis

Riim 18.10.2011 15:40

Цитата:

Сообщение от Kolyaj
Потому что массив в JavaScript-е не то же самое, что массив в PHP, и уж тем более не то же самое, что массив в Си.

тогда length неверно работает (по нему второй элемент все же есть). По моему, они там сами не разобрались еще как правильно.

Kolyaj 18.10.2011 15:42

Цитата:

Сообщение от Riim
тогда length неверно работает

Что значит неверно? Он работает по спецификации. Нигде не сказано, что он равен количеству элементов в массиве.

Riim 18.10.2011 15:50

Цитата:

Сообщение от Kolyaj
Он работает по спецификации.

я понимаю, спецификация и все такое, но просто с точки зрения обычного человеческого восприятия, ни фига ненормально, когда forEach срабатывает меньше раз, чем написано в length. Называлось бы это свойство maxIndex, никаких вопросов бы не было.

Kolyaj 18.10.2011 15:52

Я не любитель обсуждать вещи, которые невозможно изменить. Это как о политике на кухне разговаривать. Есть свойство, у него есть название, у него есть предопределённое поведение. Зачем рассуждать, что по чьему-то мнению оно работает не правильно?

float 18.10.2011 16:32

Цитата:

Зачем рассуждать, что по чьему-то мнению оно работает не правильно?
Ну может лет эдак через 15 мы будем пользоваться riimscript-ом где будет всё проще и понятнее?;)

Kolyaj 18.10.2011 16:39

Если на кухне порассуждать о "довели страну", жизнь в стране лучше не станет.

float 18.10.2011 16:48

всё зависит от того, кто сидит на кухне...

B~Vladi 18.10.2011 16:48

Мне кажется всё логично.
Получается, массив кагбэ растянут до длинны length, но это не значит что в этом случае в массиве все ячейки должны быть заполнены. И это не значит, что ячейка должна получать значение по умолчанию. Это так же касается начальных и конечных ячеек:
[,,,,1,2,3,,,,]

То же самое:
var arr = [];
arr.length = 20;
arr[5] = 1;
arr[6] = 2;
arr[7] = 3;

Цифры могут не совпадать, но суть должна быть ясна.
Всё в порядке :yes:

float 18.10.2011 16:51

Цитата:

Мне кажется всё логично.
мне кстати тоже.
более того тсу скажу что это ещё цветочки. где-то видел блог чувака, который экспериментировал с ошибками интерпретатора.
У меня так там за 1-е 2 строчки мозг в трубочку свернулся....

Riim 18.10.2011 17:23

Цитата:

Сообщение от float
Ну может лет эдак через 15 мы будем пользоваться riimscript-ом где будет всё проще и понятнее?

гугл опередил со своим Dart-ом :) .


Цитата:

Сообщение от B~Vladi
Получается, массив кагбэ растянут до длинны length, но это не значит что в этом случае в массиве все ячейки должны быть заполнены.

вполне логично звучит. Вот ради выяснения подобного и есть смысл рассуждать.

Gozar 18.10.2011 17:39

Цитата:

Сообщение от Riim (Сообщение 131746)
гугл опередил со своим Dart-ом :) .

Который родится уже мертвым, полагаю я :)

monolithed 18.10.2011 17:45

Цитата:

Сообщение от Gozar
Который родится уже мертвым, полагаю я

он уже родился((

Riim 18.10.2011 17:47

Цитата:

Сообщение от Gozar
Который родится уже мертвым, полагаю я

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

B~Vladi 18.10.2011 17:50

Цитата:

Сообщение от Riim
значит, у них есть какой-то план

Конечно есть. В комментах мысль развивается.

vflash 18.10.2011 18:17

Цитата:

Сообщение от float
всё зависит от того, кто сидит на кухне...

+1. и еще от количества и как далеко удалена от кр.площади

в этом же духе сделан array.map() , ну и в других методах массива есть такое.

вот мне этот момент никогда в голову не приходил и даже подумать не мог, что кто та так сделает. это не особенность языка , это просто кто-то так решил сделать, а потом все повторили, а потом придумали объяснение.

monolithed 18.10.2011 22:17

Цитата:

Сообщение от Riim
ведь в гугле тоже явно не дураки сидят

ну не знаю, я лично боюсь привязываться к технологиям гугла, учитывая, что они ежегодно закрывают около 20 проеков. тот же experience и labs закрыли.
Цитата:

Сообщение от Riim
Да и язык сам на первый взгляд неплох вроде.

ActionScript не напомнил ничем?

Kolyaj 19.10.2011 00:21

Цитата:

Сообщение от vflash
вот мне этот момент никогда в голову не приходил и даже подумать не мог, что кто та так сделает.

А я всю жизнь переменные без var использовал. И мне даже в голову не могло прийти, что они глобальными становятся, я даже подумать не мог, что кто-то так сделает.

Языки надо изучать, а не надеяться на свою интуицию.

vflash 19.10.2011 10:37

Цитата:

Сообщение от Kolyaj
Языки надо изучать, а не надеяться на свою интуицию.

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

если бы это был список упорядоченный по индексу я бы понял почему так. но это массив Array, и не важно как он реализован в js-е.

Kolyaj, а если бы ты решал как должно быть , ты бы также реализовал ? как сейчас реализовано

Kolyaj 19.10.2011 10:46

Цитата:

Сообщение от vflash
Kolyaj, а если бы ты решал как должно быть , ты бы также реализовал ? как сейчас реализовано

Да, с учётом того, что такое массив в JavaScript, это логичное поведение.

B~Vladi 19.10.2011 10:48

Если я не ошибаюсь, в ActionScript точно так же.

vflash 19.10.2011 11:08

hasOwnProperty тоже когда-то в стандарте был целую тучу лет. Но одумались, покаялись грешные ).

Kolyaj 19.10.2011 11:09

А hasOwnProperty чем не угодил?

vflash 19.10.2011 11:26

Kolyaj,
!!{}.hasOwnProperty // true. потому если это важно приходиться сбрасывать {hasOwnProperty: false, constructor: false, ...}

мож ошибаюсь. раньше вроде видел у Object метод который говорил есть ли у обьекта свойство или нет. а сейчас найти не удается.

Kolyaj 19.10.2011 11:54

Цитата:

Сообщение от vflash
раньше вроде видел у Object метод который говорил есть ли у обьекта свойство или нет

hasOwnProperty этот метод называется.

B~Vladi 19.10.2011 12:50

Цитата:

Сообщение от vflash
!!{}.hasOwnProperty // true

А что тут не так?

vflash 19.10.2011 12:54

ошибся по поводу hasOwnProperty . но считаю что этому методу не место в пустом объекте.

у Object появился метод getOwnPropertyDescriptor но он чуток не то.

vflash 19.10.2011 13:06

B~Vladi,
ты гденибуть видишь что в примере объекту определенно значение hasOwnProperty. по этой причине {} нельзя воспринимать как "ассоциативный массив", а хотелось бы без хаков использовать его как таковой.

Sweet 19.10.2011 13:28

Цитата:

Сообщение от vflash
ты гденибуть видишь что в примере объекту определенно значение hasOwnProperty

alert( {}.hasOwnProperty( "hasOwnProperty" ) );
:D

B~Vladi 19.10.2011 14:41

Цитата:

Сообщение от vflash
ты гденибуть видишь что в примере объекту определенно значение hasOwnProperty.

Как показал Sweet, оно определено в Object.prototype, а его в свою очередь наследует объект, созданный с помощью литерала.

vflash 19.10.2011 15:06

B~Vladi,
такой логикой можно было бы свойство __proto__ добавить в стандарт, и кучу других. Вы же не расширяете Object.prototype своими свойствами, вот тот тоже самое.

hasOwnProperty думаю со времени вырежут, и по Array.indexOf изменят позицию . если к тому времени Dart не займет место JS.

B~Vladi 19.10.2011 15:09

Цитата:

Сообщение от vflash
такой логикой можно было бы свойство __proto__ добавить в стандарт

Причем тут __proto__. Вместо него добавили метод getPrototypeOf.
Цитата:

Сообщение от vflash
hasOwnProperty думаю со времени вырежут, и по Array.indexOf изменят позицию

А я не думаю - нет смысла.

x-yuri 19.10.2011 21:38

Цитата:

Сообщение от Kolyaj
Я не любитель обсуждать вещи, которые невозможно изменить. Это как о политике на кухне разговаривать. Есть свойство, у него есть название, у него есть предопределённое поведение. Зачем рассуждать, что по чьему-то мнению оно работает не правильно?

можно много чего изменить. Просто часто это упирается в желание. У тебя, например, в данном вопросе желания изменить нету. У меня в общем-то тоже, хотя в целом я бы не отказался от более чистого/логичного/простого синтаксиса. Хочу вот coffeescript попробовать поиспользовать.

Цитата:

Сообщение от B~Vladi
Получается, массив кагбэ растянут до длинны length, но это не значит что в этом случае в массиве все ячейки должны быть заполнены.

Цитата:

Сообщение от Riim
вполне логично звучит. Вот ради выяснения подобного и есть смысл рассуждать.

да вы шутите... это не что иное как "это просто кто-то так решил сделать, а потом все повторили, а потом придумали объяснение." Это даже не принцип наименьше неожиданности: "Язык [Ruby] следует принципу «наименьшей неожиданности»: программа должна вести себя так, как ожидает программист. Однако в контексте Ruby это означает наименьшее удивление не при знакомстве с языком, а при его основательном изучении."

Цитата:

Сообщение от Kolyaj
Да, с учётом того, что такое массив в JavaScript, это логичное поведение.

другими словами, мы любим javascript таким какой он есть :)

Цитата:

Сообщение от vflash
вот мне этот момент никогда в голову не приходил и даже подумать не мог, что кто та так сделает. это не особенность языка , это просто кто-то так решил сделать, а потом все повторили, а потом придумали объяснение.

только не будем забывать, что он создавался в спешке...

Цитата:

Сообщение от vflash
hasOwnProperty тоже когда-то в стандарте был целую тучу лет. Но одумались, покаялись грешные ).

а что разве уже нету?

по поводу dart, они говорят о фундаментальных проблемах в javascript, которые нельзя изменить, не начав с нуля, либо очень сложно и это займет слишком много времени. Рассуждения на тему, что это могут быть за проблемы можно почитать здесь и здесь (еще наткнулся на сайт с wtf'ами javascript). На мой взгляд, наиболее вероятные проблемы - статическая типизация и производительность. Не то чтобы для меня это проблемы, но может для каких-то проектов это важно. Ну и в javascript есть вещи, которых лучше бы не было или лучше чтобы они было сделаны по-другому. Но не думаю, что это причина для создания нового языка.

кстати, после ecma-262-3 там уже приняли какую-то спецификацию?

Gozar 19.10.2011 21:43

x-yuri,
сорь, что не в тему, кинь ссылку на лучшие форумы или правильные форумы, ты как-то кидал ссылку на статью. Не могу вспомнить название, толи "эти страшные форумы" или что-то в этом духе.
Мне срочно пришлось писать форум, чужой взять не могу в силу определенных обстоятельств, хочу избежать граблей.
Там ещё юзабилити обсуждалось.

x-yuri 19.10.2011 22:10

http://www.artgorbunov.ru/bb/soviet/20071015/

B~Vladi 19.10.2011 22:56

Цитата:

Сообщение от x-yuri
это не что иное как "это просто кто-то так решил сделать, а потом все повторили, а потом придумали объяснение."

Главное что придумали ;)
А о ActionScript что скажите? Тоже накосячили? Или просто повторили?

vflash 19.10.2011 23:27

Цитата:

Сообщение от B~Vladi
А о ActionScript что скажите? Тоже накосячили? Или просто повторили?

а поди разбери теперь кто папа.

кстати
alert([,,,,,,,,,,1].join('+'))


Часовой пояс GMT +3, время: 16:21.