Ычан: [d | b / bro / hr / l / m / mu / o / s / tran / tu / tv / vg / x | a / aa / c / fi / jp / rm / tan / to / vn]
[Назад] [Вся нить] [Последние 50 сообщений]
Ответ в нить [Последние 50 сообщений]
Имя
Animapcha image [@] [?]
Тема   ( ответ в 7318)
Сообщение flower
Файл 
Пароль  (для удаления файлов и сообщений)
Параметры   
  • Прежде чем постить, ознакомьтесь с правилами.
  • Поддерживаются файлы типов 7Z, BZ, BZ2, GIF, GZ, JPG, MO, MP3, MP4, OGG, OGV, PDF, PNG, PSD, RAR, SVG, SWF, TXT, WEBM, WEBP, XCF, ZIP размером до 5120 кБ.
  • Ныне 3654 unique user posts. Посмотреть каталог
  • Предельное количество бампов нити: 500
200px-JavaScript-logo.png - (6.68KB, 200×200)
7318
No. 7318  
Я знаю, это не очень хороший тред, но посоветуйте мне книжку по JavaScript.
Мне нравится, когда такие книги больше похожи на справочник, но если там будут кое-какие примеры, этика использования приемов, это будет просто супер. Можно на английском. Я собираюсь приобрести бумажную версию, так что желательно чтобы я смог достать её в книжных Москвы. Алсо, я туговат, и хочу чтобы разжевано было всё.
24 сообщений пропущено. Показаны 50 последних сообщений
No. 11705  
1390479367907.jpg - (488.44KB, 494×700)
11705
>>11704

>Такое чувство, будто его авторы CS и дизайном языков вообще не интересовались.

Они просто хотели сделать лисп без скобок забыв о том что скобки - неотъемлемая его часть. Но в итоге и лисп не получился, и профита от скобок не осталось привет^Wпока макросы!. И сдохнуть бы этому недоязыку мучительной смертью, да браузерное легаси не дало. А потом его нашли хипстеры, вытащили из задницы, обмазали поверх всякими нод.жс и подняли на свои знамена. Хотя как и прочие хипстерские языки, в js'е нет абсолютно ничего не то что концептуально нового, даже годно реализованного старого. Разве что более менее удобный асинхронный API у ноды, но это скорее минус остальных чем плюс жаваскрипта.
No. 11706  
>>11705
Все так, я только добавлю, что жс появился из-за задания "быстро-быстро, за неделю, добавь мне яп в браузер, ты же программист". Эйк (кажется, не помню уже) был не дурак и пояснил, что за неделю можно сделать только сраный лисп (без типов, без неймспейсов, без еще 100500 кошерных вещей). Менеджеры сказали: "ок, только сраные скобки выпили". С тех пор в жс даже целых чисел нет. Спасибо Netscape за это.
No. 11708  
>>11704
Не знаю, не сталкивался ни с одним более удобным и гибким языком. Даже пехопе с его префиксованием переменных раздражает. В остальных языках декларации деклараций и прочие плюшки. Даже константный массив из разнотипных элементов хрен создашь с полпинка. А тут пазязя,[0,"test",function(a,b){return a+b}] и всё.
No. 11710  
>>11708
>константный массив из разнотипных элементов
но зачем?!
No. 11711  
>>11708
Процитирую:

> Да, в общем, как обычно. Дисбаланс возможностей и ограничений в сторону возможностей. Жуткий дисбаланс.

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

> Вот и получается, что писать большие проекты на подобном языке могут только люди с закостеневшим мышлением, которые и через год и через десять будут думать примерно так же, как сейчас.
No. 11747  
Если есть опыт коддинга в целом, но переходишь на JS то крайне рекомендую не столько книгу сколько вот эту статью: https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript
No. 11773  
>>11710
Классы в школе не проходят.
No. 11801  
http://jsbooks.revolunet.com/
No. 18677  
.png - (55.23KB, 141×200)
18677
Привет стив. Я тут потихоньку хочу вкатится в javascript и уже начинаю по чуть-чуть писать код. ИТТ буду кидать код, который не работает и я не могу найти в нем, где же я накосячил. Ну и заодно буду вопросы задавать по сабжу.
No. 18679  
.png - (1.90MB, 1200×1700)
18679
Вот значит кусок кода у меня:
var myArray = [];

function ints(myArray) {

if (myArray < 0) {

return myArray;

} else {

for (var i = 0; myArray >= i; i = i + 1) {

myArray.push[i];

`

   
}

return myArray;

 
}

}



Задача у него такая. Есть у нас функция, которая принимает аргумент и из этого начинает заполнять в созданный уже заранее одномерный массив. И заполнять она будет целыми числами его. Их количество равняется номеру аргумента. Но на выходе я получил следующую ошибку:

TypeError: Cannot read property '0' of undefined

Line 7

   
myArray.push[i];

               
^


Stack:


    
ints Line 7 - "myArray.push[i];"

    
testInts (Line 26:19)

`
No. 18681  
ReLIFE.png - (132.20KB, 520×245)
18681
Похоже на то, что ты собрался по одному имени «myArray» обращаться и к аргументу функции «ints» изнутри этой функции, и к ранее созданному вне её массиву.

Так не получится. Изнутри функции имя аргумента заслонит внешнее имя.

Например, если ты вызвал «ints(17)», то у тебя «myArray.push[i]» будет «17.push[0]» на первом шаге. Это и вызывает ошибку «Cannot read property '0' of undefined», потому что значение «17.push» не определено и никакого свойства 0 (через «17.push[0]» достигаемого) иметь не может.

Также сообщаю, что конструкция «имяМассива.push(значение)» записывается не через квадратные скобки (как обращение к свойству), а через круглые (как вызов функции — в данном случае, вызов метода массива).
No. 18784  
.jpg - (254.06KB, 1920×1080)
18784
>>18681
> Похоже на то, что ты собрался по одному имени «myArray» обращаться и к аргументу функции «ints» изнутри этой функции, и к ранее созданному вне её массиву.
> Так не получится. Изнутри функции имя аргумента заслонит внешнее имя.
А не подскажешь, как тогда в такой ситуации можно поступить? А то я как-то совсем запутался.
Получается параметр функции это тоже в каком-то смысле переменная?
> Также сообщаю, что конструкция «имяМассива.push(значение)» записывается не через квадратные скобки (как обращение к свойству), а через круглые (как вызов функции — в данном случае, вызов метода массива).
Чет не заметил. И правда.
No. 18786  
> буду кидать код
Зачем же так колхозно-то? Полно ведь сервисов для этих целей.
No. 18790  
>>18786
Да понял-понял. Больше так не буду. Я не знал что тут такие проблемы с отображением кода.
No. 18794  
>>18784

> Получается параметр функции это тоже в каком-то смысле переменная?

Да.

> А не подскажешь, как тогда в такой ситуации можно поступить? А то я как-то совсем запутался.

Просто дай параметру другое имя.
No. 19011  
Hanako yandere.jpg - (97.76KB, 400×626)
19011
>>18790

> Я не знал что тут такие проблемы с отображением кода.

А нѣтъ никаких особенных проблем с ним.

Просто достаточно одного обратного апострофа в начале кода (содержащего сколько угодно строк) и ещё одного в конце кода.

Выглядит так (на примере приведённого выше некорректного кода):

var myArray = [];


function ints(myArray) {
   if (myArray < 0) {
      return myArray;
   } else {
      for (var i = 0; myArray >= i; i = i + 1) {
         myArray.push[i];
      }
      return myArray;
   }
}

No. 19215  
Это бамп для того, чтобы реплика >>18679 отсеклась в архив и перестала вызывать горизонтальную полосу прокрутки во всём /dev/.

Месяц я терпел эту полосу, но на второй месяц задалбывает.
No. 19216  
1505889015007.jpg - (89.22KB, 1280×720)
19216
>>19215
Когда нечего написать по теме треда, надо использовать sage.
No. 19226  
Code Geass Ep02.png - (703.29KB, 1280×720)
19226
>>19216

Ах да.
No. 19311  
Почему эта функцию не хочет делать заглавным первый символ в строке?
https://pastebin.com/gTJ5JjLR

Неужели метод .toUpperCase() не способен работать со строкой, где только есть один символ?
No. 19313  
>>19311
toUpperCase() возвращает новую строку, а не изменяет существующую, и вообще в JS строки относятся к примитивным типам, что значит, что они всегда передаются по значению, а не по ссылке. В отличие от массива, строки не изменяются и с ними нельзя сделать так:
> var a = ['в', 'а', 'с', 'я'];
> a[0] = 'В';
> a // ['В', 'а', 'с', 'я']
Строка:
> var a = 'вася';
> a[0] // "в" - доступ по индексу работает как и в массиве
> a[0] = 'В';
> a // "вася" - нифига не изменилось
Все, что надо сделать в том примере это присвоить переменной firstLetter новое значение, возвращенное функцией toUpperCase():
> var firstLetter = str.charAt(0);
> firstLetter = firstLetter.toUpperCase();
И еще учи матчасть, прочитай хоть что-нибудь, все твои вопросы подробно разжевываются в первой главе любого учебника. Начинать можешь отсюда: https://www.w3schools.com/js/default.asp , https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript , https://webref.ru/dev/learn-javascript
No. 19317  
>>19313
> toUpperCase() возвращает новую строку, а не изменяет существующую, и вообще в JS строки относятся к примитивным типам, что значит, что они всегда передаются по значению, а не по ссылке.
Про это я вкурсе.
> > var firstLetter = str.charAt(0);
> > firstLetter = firstLetter.toUpperCase();
Не втянулся еще просто.
> И еще учи матчасть, прочитай хоть что-нибудь, все твои вопросы подробно разжевываются в первой главе любого учебника. Начинать можешь отсюда: https://www.w3schools.com/js/default.asp , https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript , https://webref.ru/dev/learn-javascript
Спасибо конечно за ссылки, но я уже читаю по learn.javascript.ru
No. 19319  
>>19313
> и вообще в JS строки относятся к примитивным типам, что значит, что они всегда передаются по значению, а не по ссылке.
Как раз таки передаются они всегда по ссылке, а по значению только сравниваются.
No. 19345  
Я сделал функцию, которая определяет, есть ли определенное свойство в объекте, но оно его не видел в функции. Пишет постоянно undefined. Почему?
var shedule = {};

shedule.name = "vasiliy";

function checkParametr(parametr) {

if (shedule.parametr === undefined) {

return true;

}

else {

return false;

}

}

alert(shedule.name);

alert(checkParametr(name));

No. 19347  
Файл
удалён
>>19345

При вызове «checkParametr(name)» в функцию «checkParametr» пытается передаться значение несуществующей переменной «name», которая-то и undefined.

Напрашивающимся выходом из этой ситуации является переписывание функции «checkParametr» таким способом, чтобы она принимала строковое значение.

Кроме того, идентификатор «undefined» не является зарезервированным словом, так что кто-нибудь может создать переменную с таким именем, поэтому на будущее надёжнее не сравнение с undefined напрямую, а сравнение строки «'undefined'» с результатом операции typeof.

С учётом вышеизложенного код принимает такой вид:

var shedule = {};

shedule.name = "vasiliy";

function checkParametr(paramName) {
   return typeof shedule[paramName] === 'undefined';
}

alert(shedule.name);
alert(checkParametr('name'));

No. 19348  
>>19345
1. Твой «checkParameter()» уже есть в языке и называется «Object.hasOwnProperty()» https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty
2. Ты передаешь в функцию необъявленную переменную «name»
3. Функция «checkParamter» у тебя проверяет, имеет ли свойство «parameter» объекта «shedule» значение undefined, она не проверяет ни что-либо еще, переданное ей в аргументы.
4. Аргумент «parameter» в функции ни разу не используется.
5. Ошибочно подразумевается, что «shedule.parametr» вернет «shedule.name», но для доступа к свойствам объекта по ключу из переменной должен использоваться другой синтаксис, через квадратные скобки. См. пост выше.
6. Если условие внутри if выполняется, то функция вернет true, когда свойства нет и false, если нет. Контринтуитивно.
7. Оператор сравнения уже возвращает булево значение, нет необходимости писать if ... else, если все, что оно делает, это возвращает то же самое, что и внутри скобок после if.
8. checkParameter() может проверять только объект «shedule», следовало бы сделать функцию более универсальной, чтобы она могла проверять любой объект, добавив еще один аргумент.
9. Все это не имеет смысла т.к. см. п. 1.
No. 19360  
Дано:
  • фиксированный урл на неподконтрольном домене, например нулевая страница чужой борды
  • регулярное выражение, определяющее нечто, что хочется поискать на этой странице, например все посты, содержащие слово "ОВОЩИ" в верхнем регистре
Задача:
Записать в JS-переменную список матчей этого регэкспа с заданной страницей
No. 19363  
>>19360
https://pastebin.com/k2KCzfTa
No. 19364  
>>19363
Что-то матчер ничего не находит. Такое ощущение, что ответ пустой. См. https://jsfiddle.net/cama387x/5/

Что я делаю не так?
No. 19365  
Файл
удалён
На сáмомъ дѣлѣ такія штуки не работаютъ во браузерѣ.

В конкретной форме https://jsfiddle.net/cama387x/5/ запрос отклоняется браузером по причине, в документе https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content указанной (смешанное активное содержимое), то есть действует запрет вызова HTTPS-сайтами содержимого HTTP-сайтов.

Если адрес http://iichan.hk/b на https://iichan.hk/b переменить, то адрес будет отклонён по другой причине: XMLHttpRequest не работает с одного сайта на другой в том случае, когда на запрашиваемом сайте (на Ычане, в данном случае) не настроены заголовки CORS (способом, в документе https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS указанным), потому что по умолчанию считается, что сайт (Ычан) не разрешал обращаться к себе через XMLHttpRequest снаружи.
No. 19366  
Решить проблему >>19360 можно, однако же, в рамках серверного JavaScript (Node.js).

Шаг 0: ставим Node.js (не только движок Node.js, но и прилагающийся по умолчанию менеджер пакетов npm).

Шаг 1: в некотором пустом тестовом каталоге ставим пакет https://www.npmjs.com/package/request командой «npm install request».

Шаг 2: запускаем REPL движка Node.js командой «node».

Шаг 3: в REPL вводим код «void require('request').get({ uri: 'https://iichan.hk/b'; }, (err, res) => console.log(res.body.includes('ОВОЩИ')))».

Шаг 4: видим, что в консоль вывелось значение «false», то есть слóва «ОВОЩИ» на странице https://iichan.hk/b в настоящее время нѣтъ.
No. 19368  
Движок 410чана, оформляя https://iichan.hk/b как гиперссылку с прилипшим к ней последующим апострофом, вставил в код >>19366 лишнюю точку с запятой перед закрывающей фигурной скобкой; предлагаю игнорировать её.

На всякий случай повторяю тот же код, обрамлённый обратными апострофами (чтобы движок 410чана воспринял его как код) и снабжённый дополнительными отступами (для красоты) и обработкою ошибок (примитивною, через «throw»):

void require('request').get(

   { uri: 'https://iichan.hk/b' },
   (err, res) => {
      if( err ) throw err;
      console.log( res.body.includes('ОВОЩИ') );
   }
);

No. 19369  
Файл
удалён
Соответственно, если вокруг кода >>19368 сочинить вебсервер (на основе http://expressjs.com/ или другого подходящего движка), отвечающий с CORS-заголовками, то через него и во браузере можно будет читать Ычан, а иначе барьеры >>19365 помешают.
No. 19370  
>>19366
Следующий логичный вопрос: есть ли поддержка node.js или другого серверного кода на github.io и аналогичных площадках?
No. 19371  
>>19370
Нет, только jekyll и html. Но с бордами, у которых есть api, и браузерный код будет работать.
No. 19373  
изображение.png - (10.56KB, 389×285)
19373
Запилил функцию, которая достает строку из свойства объекта и добавляет в конец строку-аргумент, если ее там нет. Только почему-то она не хочет работать. А именно, она стопается на этапе условия "if".
No. 19374  
>>19373
Для начала, не нужно писать велосипед, когда есть https://developer.mozilla.org/ru/docs/Web/API/Element/classList
По коду, в строке
> tempClassName.split(' ');
Допущена та же ошибка, что была описана в >>19313
String.spit() возвращает массив, а не превращает строку в массив и не присваивает переменной, хранящей эту строку новое значение. То, что alert(tempClassName) выдает значение obj.className, а не массив ["open", "menu"], не насторожило?
Ну а далее со строкой работают как с массивом, естественно у строки нет методов push и join.
Советую заиметь привычку использовать const вместо var, чтобы не возникало желания переиспользовать переменные для хранения разных типов и не подразумевать ошибочно, что неизменяемые типы должны изменяться.
https://jsfiddle.net/cgbzmk7u/1/
No. 19375  
>>19370

На странице https://www.heroku.com/pricing предлагают бесплатно до 1000 дино×часов в месяц на 512 мегабайтах памяти и с засыпанием через полчаса неактивности. (Больше и бессоннее — за денежку.)

Можно поискать и найти ещё другие хостинги. Я сообщил только о первом пришедшем на ум.
No. 19376  
Разумѣется, отвѣтъ >>19375 может дополнительно быть расширен упоминанием о том, что для Node.js не обязательно искать спецхостинг, так как можно вписать запуск сервера в автозагрузку у любого VPS, у любого VDS, да даже у домашнего компьютера с выделенным IP-адресом.
No. 19380  
>>19374
> Для начала, не нужно писать велосипед, когда есть https://developer.mozilla.org/ru/docs/Web/API/Element/classList
Да, я до них еще не дошел просто до того. Просто я специально не заглядываю наперед в методах, потому что хочу сделать велосипед из дерева. Ибо так я себе как бы делаю задачу тяжелее, а значит могу развивать мозг. Это как с книгами. Чтобы иметь хоть какую-то креативность, нужно читать книги, но слишком много читать - это вредно,так как все уже поднесено разжеванным и думать не надо. Что-то меня не в ту сторону понесло
> Допущена та же ошибка, что была описана в >>19313
> String.spit() возвращает массив, а не превращает строку в массив и не присваивает переменной, хранящей эту строку новое значение. То, что alert(tempClassName) выдает значение obj.className, а не массив ["open", "menu"], не насторожило?
Ой, я по привычке. Почему-то до сих пор на практике строки воспринимаю как массив. Не знаю, как выработать противоположную привычку.
> Советую заиметь привычку использовать const вместо var, чтобы не возникало желания переиспользовать переменные для хранения разных типов и не подразумевать ошибочно, что неизменяемые типы должны изменяться.
А вот тут детальнее. Что за const? Никогда о ней не слыхал.
No. 19381  
>>19380
const это как var, только const. Вместо переменной будет константа. На практике именно изменяемые переменные нужны довольно редко. Ознакомиться со всеми этими вещами можно в виде нескучных уроков: https://youtu.be/2iLVFyYwyRA
Еще по всем приведенным примерам кода видно очень вольное использование return:
> return alert("Данный класс уже существует")
Вопрос: что вернет эта функция в данном случае? Что она должна возвращать и зачем?
Кроме того, научись пользоваться консолью браузера и отладчиком, кажется весь твой инструментарий сейчас ограничен alert().
No. 24849  
5512_Orange_Hartpfy.png - (19.88KB, 128×121)
24849
Посоветуйте годный гайд по ascii рогаликом на чистом canvas js без всяких сторонних либ.
ЗЫ: нигде такого не нашел, а самому додуматся тяжело
No. 25508  
>>7318
https://github.com/azat-io/you-dont-know-js-ru
No. 26048  
nice.png - (1.47MB, 1640×926)
26048
Добрый день!
Может кто либо подсказать в чем проблема со следующим JSON файлом?
https://wtools.io/paste-code/bAyx

Он ругается и выдает ошибку "EOF expected".
Пытался закрыть все в квадратные скобки, но тогда JS код не видит параметры самого JSON файла.
Может кто либо помочь с этим?

https://wtools.io/paste-code/bAyw
No. 26050  
Если завернуть всё в квадратные скобки, то наверно надо обращаться по индексам,
data[0].name

No. 26051  
>>26050
это действительно помогло, но программа возвращала параметры только 1 элемента. Пришлось переработать чтобы возвращать все параметры.

console.log(data.map(point=>point.translations.deu.official));
No. 26052  
Однако теперь у меня другая проблема...
Как я могу принять данные пользователя и сохранить их в жабаскрипте? Prompt() работает только в браузере, а мне нужно брать инпут через терминал VSCODE. Также пробовал readline(), но результата не было.
No. 26057  
>>26052
>Также пробовал readline(), но результата не было.
Чтобы был результат, надо переключить терминал в launch.json, на integratedTerminal, это известная беда: https://stackoverflow.com/a/66850526
No. 26058  
irlain.jpg - (63.88KB, 480×640)
26058
Вечер добрый!
В общем, у меня есть жабаскрипт код и .json файл который жабаскрип код использует чтобы достать оттуда параметр "translations" и его подпараметры 'из матрицы 'rus', 'deu' , etc. При запуске программы, она просит пользователя ввести один из ключей типо 'rus' и опираясь на это выводит названия стран на русском языке.
Мне нужно убрать интеракцию и передавать ключ 'rus' через терминал, типо "node main.js rus".
Может кто помочь пожалуйста?
Оставляю ссылочку на гитхаб для доп информации.
https://github.com/TheRadioDept/technical-question
No. 26059  
2b.jpg - (30.02KB, 550×600)
26059
Я разобрался в проблеме, оказалось проще чем я думал. Всем добра!
Удалить сообщение []
Пароль  
[Mod]