Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.04.2020, 21:27
Кандидат Javascript-наук
Отправить личное сообщение для jaroslav.tavgen Посмотреть профиль Найти все сообщения от jaroslav.tavgen
 
Регистрация: 18.09.2014
Сообщений: 128

Вообще ничего не понял в этом коде...
Array.prototype.sum = function (...arguments){
    return this.reduce(arguments);
}
[1,2,3].sum((a,b)=>a+b);

Результат: TypeError: Cannot read property 'sum' of undefined с указанием на последнюю строчку.

Я, честно говоря, вообще не понял, что произошло Как так получилось, что массив стал считаться undefined?

Последний раз редактировалось jaroslav.tavgen, 07.04.2020 в 21:37.
Ответить с цитированием
  #2 (permalink)  
Старый 08.04.2020, 07:03
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,745

Поизучайте автовставку ';'

Array.prototype.sum = function (...arguments){
    return this.reduce(arguments);
};
[1,2,3].sum((a,b)=>a+b);
Ответить с цитированием
  #3 (permalink)  
Старый 08.04.2020, 09:34
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

voraa,
чего то в супе коде не хватает.
Ответить с цитированием
  #4 (permalink)  
Старый 08.04.2020, 09:40
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,745

Сообщение от рони Посмотреть сообщение
voraa,
чего то в супе коде не хватает.
Я отвечаю на вопрос почему массив - undefined.
А с кодами (reduce, ...) - лучше человек сам поучится разбираться.
Ответить с цитированием
  #5 (permalink)  
Старый 08.04.2020, 09:55
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

voraa,
почему бы не довести код, до рабочего состояния в целом?
Ответить с цитированием
  #6 (permalink)  
Старый 08.04.2020, 10:01
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,745

Сообщение от рони Посмотреть сообщение
voraa,
почему бы не довести код, до рабочего состояния в целом?
Array.prototype.sum = function (arguments){
    return this.reduce(arguments);
};
alert([1,2,3].sum((a,b)=>a+b));


Можно и код написать, когда делать нечего.
Но люди сюда приходят с конкретными вопросами.
Если я просто в коде уберу эти гребанные три точки, то этого мало.
Человек должен понять, что они обозначают, когда использовать их, а когда нет.
Если человек учится программировать, то это подразумевает, что он сам что то читает из документации, сам пробует, сам исправляет ошибки.
Ну бывает, упрешься в какую нибудь ерунду (лишнюю запятую, не поставленный ; ) и тупо смотришь, не видя этой мелочи.
Можно подсказать, какой API использовать...
Но писать коды, решая задачки для студентов....

Последний раз редактировалось voraa, 08.04.2020 в 10:08.
Ответить с цитированием
  #7 (permalink)  
Старый 08.04.2020, 10:12
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

Сообщение от voraa
Если я просто в коде уберу эти гребанные три точки, то этого мало.
ок, подождём пока код исправит автор темы.
Ответить с цитированием
  #8 (permalink)  
Старый 12.04.2020, 11:55
Кандидат Javascript-наук
Отправить личное сообщение для jaroslav.tavgen Посмотреть профиль Найти все сообщения от jaroslav.tavgen
 
Регистрация: 18.09.2014
Сообщений: 128

Сообщение от voraa Посмотреть сообщение
Поизучайте автовставку ';'

Array.prototype.sum = function (...arguments){
    return this.reduce(arguments);
};
[1,2,3].sum((a,b)=>a+b);
Офигеть. То есть, если добавить точку с запятой, то этого аномального undefined нет.

А как это работает? Я прочитал про автоставку точки с запятой https://codeburst.io/ecmascript-auto...n-50f09091e377 , но до сих пор не понял, что меняет наличие или отсутствие точки с запятой после закрывающей скобки }

UPD: начинаю понимать. Дело в том. что [1,2,3]... идёт сразу после закрывающей фигурной скобки. Если в консоле Chrome в начале отдельно выполнить Array.prototype..., а потом отдельно [1,2,3]... , то undefined нет. В общих чертах начал понимать, но до конца пока неясно.

Последний раз редактировалось jaroslav.tavgen, 12.04.2020 в 12:06.
Ответить с цитированием
  #9 (permalink)  
Старый 12.04.2020, 12:32
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,745

В первом правиле говорится про токен-нарушитель. Тоесть нечто такое, что делает синтаксическую конструкцию недопустимой.

Но конструкция }[ - вполне допустима

Array.prototype.sum = function (...arguments){returnthis.reduce(arguments);}[1,2,3]

Мы описали какую то функцию. Функция - это объект. К объекту применима операция [] для получения свойства по имени.
[1,2,3] - тут используется операция ',', которая дает значение последнего из выражений (3)
Т.е приведенный выше пример пытается взять значение свойства с именем '3' у объекта функции. Такого нет, поэтому undefined/
Ответить с цитированием
  #10 (permalink)  
Старый 12.04.2020, 12:39
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

jaroslav.tavgen, а что вы, собственно, сделать то пытаетесь?
На имплементацию метода «sum» это не похоже, на алиас базового метода «reduce» - тоже.

Хотите понять в чем у вас ошибка - дебажте, посмотрите, что у вас находится в переменной «arguments».

P.S. переопределять значение переменной «arguments» - не есть хорошо, лучше подберите своей переменной другое название, например «args»
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что в этом коде не так? nzbt Javascript под браузер 0 27.02.2019 15:27
Как в этом коде настроить промежуток на 10 сек ??? ilyas-> Элементы интерфейса 5 27.07.2013 04:54
То-ли лыжи не едут, толи... возможно ошибка в коде. AzriMan Общие вопросы Javascript 19 18.05.2009 16:07