Object is not a function как исправить

Время на прочтение
5 мин

Количество просмотров 396K

JavaScript может быть кошмаром при отладке: некоторые ошибки, которые он выдает, могут быть очень трудны для понимания с первого взгляда, и выдаваемые номера строк также не всегда полезны. Разве не было бы полезно иметь список, глядя на который, можно понять смысл ошибок и как исправить их? Вот он!

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

Как читать ошибки?

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

Типичная ошибка из Chrome выглядит так:

Uncaught TypeError: undefined is not a function

Структура ошибки следующая:

  1. Uncaught TypeError: эта часть сообщения обычно не особо полезна. Uncaught значит, что ошибка не была перехвачена в catch, а TypeError — это название ошибки.
  2. undefined is not a function: это та самая часть про ошибку. В случае с сообщениями об ошибках, читать их нужно прямо буквально. Например, в этом случае, она значит то, что код попытался использовать значение undefined как функцию.

Другие webkit-браузеры, такие как Safari, выдают ошибки примерно в таком же формате, как и Chrome. Ошибки из Firefox похожи, но не всегда включают в себя первую часть, и последние версии Internet Explorer также выдают более простые ошибки, но в этом случае проще — не всегда значит лучше.

Теперь к самим ошибкам.

Uncaught TypeError: undefined is not a function

Связанные ошибки: number is not a function, object is not a function, string is not a function, Unhandled Error: ‘foo’ is not a function, Function Expected

Возникает при попытке вызова значения как функции, когда значение функцией не является. Например:

var foo = undefined;
foo();

Эта ошибка обычно возникает, если вы пытаетесь вызвать функцию для объекта, но опечатались в названии.

var x = document.getElementByID('foo');

Несуществующие свойства объекта по-умолчанию имеют значение undefined, что приводит к этой ошибке.

Другие вариации, такие как “number is not a function” возникают при попытке вызвать число, как будто оно является функцией.

Как исправить ошибку: убедитесь в корректности имени функции. Для этой ошибки, номер строки обычно указывает в правильное место.

Uncaught ReferenceError: Invalid left-hand side in assignment

Связанные ошибки: Uncaught exception: ReferenceError: Cannot assign to ‘functionCall()’, Uncaught exception: ReferenceError: Cannot assign to ‘this’

Вызвано попыткой присвоить значение тому, чему невозможно присвоить значение.

Наиболее частый пример этой ошибки — это условие в if:

if(doSomething() = 'somevalue')

В этом примере программист случайно использовал один знак равенства вместо двух. Выражение “left-hand side in assignment” относится к левой части знака равенства, а, как можно видеть в данном примере, левая часть содержит что-то, чему нельзя присвоить значение, что и приводит к ошибке.

Как исправить ошибку: убедитесь, что вы не пытаетесь присвоить значение результату функции или ключевому слову this.

Uncaught TypeError: Converting circular structure to JSON

Связанные ошибки: Uncaught exception: TypeError: JSON.stringify: Not an acyclic Object, TypeError: cyclic object value, Circular reference in value argument not supported

Всегда вызвано циклической ссылкой в объекте, которая потом передается в JSON.stringify.

var a = { };
var b = { a: a };
a.b = b;
JSON.stringify(a);

Так как a и b в примере выше имеют ссылки друг на друга, результирующий объект не может быть приведен к JSON.

Как исправить ошибку: удалите циклические ссылки, как в примере выше, из всех объектов, которые вы хотите сконвертировать в JSON.

Unexpected token ;

Связанные ошибки: Expected ), missing ) after argument list

Интерпретатор JavaScript что-то ожидал, но не обнаружил там этого. Обычно вызвано пропущенными фигурными, круглыми или квадратными скобками.

Токен в данной ошибке может быть разным — может быть написано “Unexpected token ]”, “Expected {” или что-то еще.

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

Ошибка с [ ] { } ( ) обычно вызвано несовпадающей парой. Проверьте, все ли ваши скобки имеют закрывающую пару. В этом случае, номер строки обычно указывает на что-то другое, а не на проблемный символ.

Unexpected / связано с регулярными выражениями. Номер строки для данного случая обычно правильный.

Unexpected; обычно вызвано символом; внутри литерала объекта или массива, или списка аргументов вызова функции. Номер строки обычно также будет верным для данного случая.

Uncaught SyntaxError: Unexpected token ILLEGAL

Связанные ошибки: Unterminated String Literal, Invalid Line Terminator

В строковом литерале пропущена закрывающая кавычка.

Как исправить ошибку: убедитесь, что все строки имеют правильные закрывающие кавычки.

Uncaught TypeError: Cannot read property ‘foo’ of null, Uncaught TypeError: Cannot read property ‘foo’ of undefined

Связанные ошибки: TypeError: someVal is null, Unable to get property ‘foo’ of undefined or null reference

Попытка прочитать null или undefined так, как будто это объект. Например:

var someVal = null;
console.log(someVal.foo);

Как исправить ошибку: обычно вызвано опечатками. Проверьте, все ли переменные, использованные рядом со строкой, указывающей на ошибку, правильно названы.

Uncaught TypeError: Cannot set property ‘foo’ of null, Uncaught TypeError: Cannot set property ‘foo’ of undefined

Связанные ошибки: TypeError: someVal is undefined, Unable to set property ‘foo’ of undefined or null reference

Попытка записать null или undefined так, как будто это объект. Например:

var someVal = null;
someVal.foo = 1;

Как исправить ошибку: это тоже обычно вызвано ошибками. Проверьте имена переменных рядом со строкой, указывающей на ошибку.

Uncaught RangeError: Maximum call stack size exceeded

Связанные ошибки: Uncaught exception: RangeError: Maximum recursion depth exceeded, too much recursion, Stack overflow

Обычно вызвано неправильно программной логикой, что приводит к бесконечному вызову рекурсивной функции.

Как исправить ошибку: проверьте рекурсивные функции на ошибки, которые могут вынудить их делать рекурсивные вызовы вечно.

Uncaught URIError: URI malformed

Связанные ошибки: URIError: malformed URI sequence

Вызвано некорректным вызовом decodeURIComponent.

Как исправить ошибку: убедитесь, что вызовы decodeURIComponent на строке ошибки получают корректные входные данные.

XMLHttpRequest cannot load some/url. No ‘Access-Control-Allow-Origin’ header is present on the requested resource

Связанные ошибки: Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at some/url

Эта проблема всегда связана с использованием XMLHttpRequest.

Как исправить ошибку: убедитесь в корректности запрашиваемого URL и в том, что он удовлетворяет same-origin policy. Хороший способ найти проблемный код — посмотреть на URL в сообщении ошибки и найти его в своём коде.

InvalidStateError: An attempt was made to use an object that is not, or is no longer, usable

Связанные ошибки: InvalidStateError, DOMException code 11

Означает то, что код вызвал функцию, которую нельзя было вызывать в текущем состоянии. Обычно связано c XMLHttpRequest при попытке вызвать на нём функции до его готовности.

var xhr = new XMLHttpRequest();
xhr.setRequestHeader('Some-Header', 'val');

В данном случае вы получите ошибку потому, что функция setRequestHeader может быть вызвана только после вызова xhr.open.

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

Заключение

JavaScript содержит в себе одни из самых бесполезных ошибок, которые я когда-либо видел, за исключением печально известной Expected T_PAAMAYIM_NEKUDOTAYIM в PHP. Большая ознакомленность с ошибками привносит больше ясности. Современные браузеры тоже помогают, так как больше не выдают абсолютно бесполезные ошибки, как это было раньше.

Какие самые непонятные ошибки вы встречали? Делитесь своими наблюдениями в комментариях.

P.S. Этот перевод можно улучшить, отправив PR здесь.

I was trying to clean up this react component by extracting fillCalendar() from being a method of the component into it’s own js file and importing it instead. Originally this.state.datesArray was set in a componentWillMount() lifecycle method. Now I’m trying to directly initialize it inside the constructor because this is what the react docs recommends. Doing it this way now throws a “TypeError: Object(…) is not a function” error and I don’t know why. Here is what Calendar.js use to look like see here.

Calendar.js

import React, { Component } from 'react';
import { fillCalendar } from '../calendar.tools'

class Calendar extends Component {
  constructor(props) {
    super(props)
    this.state = {
      datesArray: fillCalendar(7, 2018),
      date: new Date(),
      monthIsOffset: false,
      monthOffset: new Date().getMonth(),
      yearOffset: new Date().getFullYear()
    }
  }
  render() {
    return (
      ...
    )
  }
}

calendar.tools.js

let fillCalendar = (month, year) => {
  let datesArray = []
  let monthStart = new Date(year,month,1).getDay()
  let yearType = false;
  let filledNodes = 0;
  // Check for leap year
  (year%4 === 0) ? 
    (year%100 === 0) ?
      (year%400) ? yearType = true : yearType = false : 
    yearType = true : 
  yearType = false
  const monthArrays = yearType ? [31,29,31,30,31,30,31,31,30,31,30,31] : [31,28,31,30,31,30,31,31,30,31,30,31]
  if (month === 0) { month = 12; }
  let leadDayStart = monthArrays[month-1] - monthStart + 1
  // Loop out lead date numbers
  for (let i = 0; i < monthStart; i++) {
    datesArray.push({date: leadDayStart, type: "leadDate", id: "leadDate" + i})
    leadDayStart++
    filledNodes++
  }
  if (month === 12) { month = 0; }
  // Loop out month's date numbers
  for (let i = 0; i < monthArrays[month]; i++) {
    datesArray.push({date: i + 1, type: "monthDate", id: "monthDate" + i})
    filledNodes++
  }
  // fill the empty remaining cells in the calendar
  let remainingNodes = 42 - filledNodes;
  for (let i = 0; i < remainingNodes; i++) {
    datesArray.push({date: i + 1, type: "postDate", id: "postDate" + i})
  }
  return datesArray
}

The Javascript error TypeError: "x" is not a function occurs when there is an attempt to call a function on a value or object, which is not actually a function.

Error message:

TypeError: "x" is not a function

Error Type:

TypeError

What Causes TypeError: “x” is not a function

A TypeError: "x" is not a function in Javascript generally occurs in one of the following scenarios:

  • A typographical error in a function call.
  • Missing script library.
  • When a function is called on a property that is not actually a function.
  • A TypeError: "x" is not a function occurs when a function is called on an object that does not contain the called function.
  • When calling a built-in function that expects a callback function argument, which does not exist.
  • When the called function is within a scope that is not accessible

TypeError: “x” is not a function Examples

1. Typo

A typical scenario for the TypeError: "x" is not a function to occur is when there is a typo in the called function name:

var elem = document.getElementByID('ID');

Running the above code leads to the following Javascript error:

TypeError: document.getElementByID is not a function

The correct function name is getElementById():

var elem = document.getElementById('ID');

2. Object Does Not Contain Function

Another common cause for the TypeError: "x" is not a function is when a function is called an object that does not actually contain the function:

var foo = {
   bar: function() {
      console.log("bar called");
   }
};
foo.baz();

In the above example, the foo object contains a function bar(). However, the above code attempts to call the function baz(), which foo does not contain. Running the above code leads to the following Uncaught TypeError: "x" is not a function:

Uncaught TypeError: foo.baz is not a function

If the Javascript code is modified to call the correct function bar():

var foo = {
   bar: function() {
      console.log("bar called");
   }
};    
foo.bar();

The correct output is produced:

bar called

How to Fix Javascript TypeError: “x” is not a function

The TypeError: "x" is not a function can be fixed using the following suggestions:

  • Paying attention to detail in code and minimizing typos.
  • Importing the correct and relevant script libraries used in code.
  • Making sure the called property of an object is actually a function.
  • Making sure objects contain the called function to avoid TypeError: "x" is not a function.
  • Making sure functions passed in as callbacks do exist.
  • Making sure called functions are within the correct and accessible scope.

Track, Analyze and Manage Errors With Rollbar

Rollbar in action

Managing errors and exceptions in your code is challenging. It can make deploying production code an unnerving experience. Being able to track, analyze, and manage errors in real-time can help you to proceed with more confidence. Rollbar automates error monitoring and triaging, making fixing Javascript errors easier than ever. Sign Up Today!

@sagar-gavhane

Do you want to request a feature or report a bug?

Bug 🐛🐛 (May be 🤔🙄)

What is the current behaviour?

I have created react functional component and implement state full logic using useState method but it throws an TypeError: Object(...) is not a function

Which versions of React, and which browser / OS are affected by this issue? Did this work in previous versions of React?

Installed packages

"dependencies": {
  "@reach/router": "^1.2.1",
  "formik": "^1.4.1",
  "prop-types": "^15.6.2",
  "react": "^16.7.0-alpha.2",
  "react-dom": "^16.7.0-alpha.2",
  "react-scripts": "2.1.1",
  "styled-components": "^4.1.3",
  "yup": "^0.26.6"
},

Github repository : https://github.com/sagar-gavhane/workbench-client
Website: https://wonderful-allen-a3058d.netlify.com/
Screenshot:
screenshot

alfondotnet, bengrunfeld, sagar-gavhane, duke7able, Rostislav-Poleshko, xiaobc1234, KovalevAnton, nazmul-prince, theredpea, 0xdevalias, and 25 more reacted with thumbs up emoji

@nikilok

@sagar-gavhane you got a few glitches in your project setup.
/src/components/Input/input.js

Line 1 should be
import Input from ‘./Input.jsx’

/src/screens/auth/Login/Login.jsx
Line 1 should be
import Input from ‘../../../components/Input/input.js’

and in package.json
use
“react”: “next”,
“react-dom”: “next”,

You should be good after that.

rwieruch, caprica-Six, alfondotnet, jyjunyz, bengrunfeld, mikemfleming, khaza593, Nikac, theredpea, nursultanturdaliev, and 8 more reacted with thumbs up emoji
Wopliieee, Rostislav-Poleshko, andrewaarestad, shivaniarbat, khaza593, cmgonzales, RyRy79261, bougieL, casssiahaluu, mohamad11badrah, and 7 more reacted with thumbs down emoji
14702, anaschoudharytj, and gourdeepali reacted with laugh emoji
14702 reacted with hooray emoji
bengrunfeld, mikemfleming, khaza593, waqaramjad, 14702, NISHITdp, and vinay-gaddam reacted with heart emoji

@rwieruch

I ran into this issue as well because somehow I assumed that Hooks moved into 16.7.0-alpha.2. But I had to use next instead. Thanks @nikilok

Beraliv, sagar-gavhane, Necmttn, maximQa-kgd, afisher88, Nikac, nursultanturdaliev, spideep, aliaanis, and arjun1194 reacted with thumbs up emoji
alfonmga, WillSquire, sagar-gavhane, khaza593, and spideep reacted with heart emoji

@VdustR

@pungggi

@WillSquire

Had to use next instead of 16.7.0-alpha.2 also, is this expected behaviour?

Really wanted a specific version in package.json instead of next.

@JNaeemGitonga

Hey guys! How are you using next to use hooks? FB says they aren’t even releasing yet and that it will be a few months, read here. currently I am using 16.7.0-alpha.2 and I still get the error.

@ctur

@JNaeemGitonga

@ctur can tell you didn’t read the question.

killpowa

added a commit
to gorilla-devs/GDLauncher
that referenced
this issue

Jan 5, 2019

@killpowa

@EdmundsEcho

FYI – using 16.7.0-alpha.2 should work as an entry into the package.json. However, in my experience, only when I changed the entry to next (per the advice above), did the error go away.

Note, I also deleted my yarn.lock and node_modules for good measure.

@gaearon

Both 16.7.0-alpha.2 and next (which we’ve fixed to point to it) should work.

sagar-gavhane, rwieruch, EdmundsEcho, jpauloconnor, ivandevp, phettz, lukejsimonetti, cyseria, MohamedHajr, bengrunfeld, and 2 more reacted with thumbs up emoji
bengrunfeld and hughesmatias reacted with heart emoji

@gaearon

(But 16.8 is the first stable version to have Hooks)

@volkanunsal

I just started getting this error in production. It doesn’t happen in development, though. I’m using 16.8.x. Can anyone shed light on what is actually causing it?

@gaearon

This error might happen if you use old React. It’s not even a React error — you’re calling React.useState(), and if that doesn’t exist (such as in old versions), it’s like calling React.lalalala(). The function doesn’t exist, so you’re calling undefined() and it crashes.

It might also happen if you call a non-existent method on some other library.

volkanunsal, devmrin, jdpaterson, evanhli, JimishF, MarioKrstevski, CKanishka, manjotsk, joshuacrowley, helenant007, and 2 more reacted with thumbs up emoji
ImedAdel reacted with heart emoji

@volkanunsal

@steelx

I was getting the same erorr, but then I released I was using createState instead of useState

@merveillevaneck

Hey! came across this while having a very similar issue except ive checked all the solutions and it doesnt seem to solve the problem. I’m very new to functional paradigms and react(and even javascript), what else should i try to investigate?

I’ve got a lambda function as a component which has a body that starts off by generating some hooks. but it looks like the lambda isnt recognised, even though all my other components are lambdas too and they seem to work fine

@corysimmons

Might help someone: Make sure you aren’t import { Foo } from 'Foo' when you should be import Foo from 'Foo'. That is… this error is actually pretty descriptive and you can confirm it by commenting out the erroring out code, then doing something like console.log(typeof Foo) to see if it is an actual function or if it’s something completely different.

lancekmorgan, Athou, martinsotirov, NinjaFocks, Anton-4, WayneLambert, Leon0315, nathan-bird, shimeilee, zvone00, and 3 more reacted with thumbs up emoji

@Tony1106

I have the same error and just figure it out. The problem is when you copy the code from the demo site, this line is not correct:

import { makeStyles } from '@material-ui/core/styles';

Change to this one:

import { makeStyles } from "@material-ui/styles";

Check the docs from here

@Vijay-Barve

try this
npm install rxjs@6.3.3 rxjs-compat@6.3.3 –save

@EdDevs2503

Hey, your problem is complicated, but i could resolvet. You problem is React version. run this command: npm install react@next react-dom@next –save

@eebasadre20

Hey, your problem is complicated, but i could resolvet. You problem is React version. run this command: npm install react@next react-dom@next –save

@EdDevs2503 I tried yours but it didn’t work for me. I found out that when I tried to import { useRouter, matchPath } from ‘next/router’, the matchPath is undefined. I’m not sure what will be the equivalent of matchPath in next.

@kami23

Hello , i have the same problem and the version of react that i am using is :
“react”: “^16.9.0”,
“react-dom”: “^16.9.0”,
How to solve this ? i tried to use the next solution and it didn’t work

@kapilgorve

@kami23 I just ran into this error. It could also be an indication that you are importing something in your component which doesn’t exist.
For me it was this – import { withNavigation } from ‘@react-navigation/web’;
This withNavigation doesn’t exist inside the @react-navigation/web .

@moh-nur

I was getting the same error. It was due to importing useState from the wrong library. If you’re using >16.8 make sure you have:

import React, { useState } from 'react';

@N-Akoma

TypeError: Cannot read property ‘pxToRem’ of undefined
(anonymous function)
C:/Users/Young Akoma/Desktop/Anthony/page-app/src/Components/Explore.js:16
13 | width: ‘100%’,
14 | },
15 | heading: {

16 | fontSize: theme.typography.pxToRem(15),
| ^ 17 | flexBasis: ‘33.33%’,
18 | flexShrink: 0,
19 | },

please i really need help for this. i cant resolve it

@kevinjose1

I got the same error, but somehow sorted it well . The issue was due to the React and React- Dom versions. I was using the older versions of React and React-dom. The issue sorted when i upgraded into latest version.
Please make sure that you update both React and React-dom at the same time.
Run the below commands in cmd to upgrade React . Open your package.json and check your current react and react-dom before updating.

npm install –save react@latest
npm install –save react-dom@latest

@jith87

Hey, your problem is complicated, but i could resolvet. You problem is React version. run this command: npm install react@next react-dom@next –save

This fixed the issue.

@waqaramjad

@sagar-gavhane you got a few glitches in your project setup.
/src/components/Input/input.js

Line 1 should be
import Input from ‘./Input.jsx’

/src/screens/auth/Login/Login.jsx
Line 1 should be
import Input from ‘../../../components/Input/input.js’

and in package.json
use
“react”: “next”,
“react-dom”: “next”,

You should be good after that.

thanks @nikilok you resolved my issue but i want to know the logic behind that because i never used next in react version

@N-Akoma

thanks

On Wed, Oct 23, 2019 at 2:40 AM Waqar Amjad ***@***.***> wrote:
@sagar-gavhane <https://github.com/sagar-gavhane> you got a few glitches
in your project setup.
/src/components/Input/input.js

Line 1 should be
import Input from ‘./Input.jsx’

/src/screens/auth/Login/Login.jsx
Line 1 should be
import Input from ‘../../../components/Input/input.js’

and in package.json
use
“react”: “next”,
“react-dom”: “next”,

You should be good after that.

thanks @nikilok <https://github.com/nikilok> you resolved my issue but i
want to know the logic behind that because i never used next in react
version


You are receiving this because you commented.
Reply to this email directly, view it on GitHub
<#14484?email_source=notifications&email_token=AMG44RYN7Z7PURDBGG54IRDQQAL2FA5CNFSM4GL526V2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOECAYC6Q#issuecomment-545358202>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AMG44R66EHA4GTZYJNEVM2DQQAL2FANCNFSM4GL526VQ>
.

@zackster

I had to upgrade react-redux, delete my node_modules, then reinstall.

@danielravina

I was struggling with this for the past 2 hours. was a typo for me

import React, { useContex } from "react";`

... many lines below ...

const { projects } = useContex(AppContext);

😭

@wjes

My error was trying to import useQuery from react instead of @apollo/react-hooks, thanks you all!

@jeremy-hunter

Wow – thank you – I did the same thing 🤦

@hamzahassan52

npm install ng2-charts@2.2.0 –save work for me. fine

@mediamaker

I was using a named export instead of default and had to remove the brackets
import { useSiteMetadata } from "../hooks/useSiteMetadata"
import useSiteMetadata from "../hooks/useSiteMetadata"

@alexotoo

have a closer look at the name of the value passed in reference to the function. Is it the same name you typed as your prop?
Need more details on your code

@dandv

All these comments about how tiny typos caused all this time waste and frustration, suggest that this error could be clarified by echoing the incorrect name. @gaearon, anything that could be done in that direction, or is this a JavaScript limitation?

@atidivya

I am still getting the error “TypeError: Object(…) is not a function” for using the useParams from react.

"react": "^16.13.1",
"react-dom": "^16.13.1",

@jyotiprakash111

@atidivya Do you able to solve the issue or not ?

@KrunalRajkotiya

I had come across the same problem and what worked for me is updating the react and react-dom to the latest version.

To update to the latest version.
npm install --save react@latest
npm install --save react-dom@latest

Now my current version of react and reat-dom is
"react": "^16.13.1"
"react-dom": "^16.13.1"

@THPubs

I was using a named export instead of default and had to remove the brackets
import { useSiteMetadata } from "../hooks/useSiteMetadata"
import useSiteMetadata from "../hooks/useSiteMetadata"

Thanks a lot @mediamaker . This worked for my use case where I was importing a function which use React inside a NextJS project.

@lavahasif

npm install –save react@latest
npm install –save react-dom@latest
this solved my problem .when i was using usestate and useeffect in react

@smtlab

@facebook
facebook

locked as off-topic and limited conversation to collaborators

Sep 21, 2020

@gaearon

I’m going to lock this because the comments are either getting repetitive or include unrelated suggestions.

If you have this error, it means you’re importing something that doesn’t exist. It doesn’t have to do with React per se.

TypeError:”x” не является функцией

Исключение JavaScript “не является функцией” возникает,когда была попытка вызвать значение из функции,но на самом деле значение не является функцией.

Message

TypeError: "x" is not a function. (V8-based & Firefox & Safari)

Error type

Что пошло не так?

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

Может, в названии функции опечатка? Может быть, объект, для которого вы вызываете метод, не имеет этой функции? Например, у Objects JavaScript нет функции map , но у объекта Array JavaScript есть.

Существует множество встроенных функций,нуждающихся в функции (обратного вызова).Чтобы эти методы работали должным образом,вам необходимо предоставить функцию:

  • При работе с объектами Array или TypedArray :
    • Array.prototype.every(), Array.prototype.some(), Array.prototype.forEach(), Array.prototype.map(), Array.prototype.filter(), Array.prototype.reduce(), Array.prototype.reduceRight(), Array.prototype.find()
  • При работе с объектами Map и Set :
    • Map.prototype.forEach() и Set.prototype.forEach()

Examples

Ошибка в названии функции

В этом случае,что случается слишком часто,в названии метода присутствует опечатка:

const x = document.getElementByID('foo');

Правильное имя функции – getElementById :

const x = document.getElementById('foo');

Функция вызвана не на том объекте

Для определенных методов вы должны предоставить функцию (обратного вызова), и она будет работать только с определенными объектами. В этом примере используется Array.prototype.map() , который работает только с объектами Array .

const obj = { a: 13, b: 37, c: 42 };

obj.map(function (num) {
  return num * 2;
});


Вместо этого используйте массив:

const numbers = [1, 4, 9];

numbers.map(function (num) {
  return num * 2;
});


Функция разделяет имя с ранее существовавшей собственностью

Иногда при создании класса может быть свойство и функция с тем же именем.При вызове функции компилятор думает,что функция перестает существовать.

function Dog() {
  this.age = 11;
  this.color = "black";
  this.name = "Ralph";
  return this;
}

Dog.prototype.name = function (name) {
  this.name = name;
  return this;
}

const myNewDog = new Dog();
myNewDog.name("Cassidy"); 

Вместо этого используйте другое имя свойства:

function Dog() {
  this.age = 11;
  this.color = "black";
  this.dogName = "Ralph"; 
  return this;
}

Dog.prototype.name = function (name) {
  this.dogName = name;
  return this;
}

const myNewDog = new Dog();
myNewDog.name("Cassidy"); 

Использование скобок для умножения

В математике 2 × (3+5)можно записать как 2*(3+5)или просто 2(3+5).

Использование последнего приведет к ошибке:

const sixteen = 2(3 + 5);
console.log(`2 x (3 + 5) is ${sixteen}`);

Вы можете исправить код, добавив оператор * :

const sixteen = 2 * (3 + 5);
console.log(`2 x (3 + 5) is ${sixteen}`);

Правильно импортируйте экспортированный модуль

Убедитесь,что вы правильно импортируете модуль.

Пример библиотеки помощников ( helpers.js )

const helpers = function () { };

helpers.groupBy = function (objectArray, property) {
  return objectArray.reduce((acc, obj) => {
    const key = obj[property];
    acc[key] ??= [];
    acc[key].push(obj);
    return acc;
  }, {});
}

export default helpers;

Правильное использование импорта ( App.js ):

import helpers from './helpers';

See also

  • Functions


JavaScript

  • RangeError:аргумент не является корректной кодовой точкой

    Исключение JavaScript «Недопустимая кодовая точка» возникает, когда значения NaN, отрицательные целые числа (-1), нецелые числа (5.4) или больше 0x10FFFF (1114111)

  • TypeError: “x” не является конструктором

    Исключение JavaScript «не является конструктором» возникает, когда была попытка использовать объектную переменную, но была попытка использовать объект или переменную

  • ReferenceError: «x» не определен

    Исключение JavaScript «переменная не определена» возникает, когда где-то есть несуществующая ссылка.

  • RangeError:точность вне досягаемости

    Исключение JavaScript «точность вне допустимого диапазона» возникает, когда число, выходящее за пределы 0 и 20 (или 21), было передано в toFixed toPrecision.

Добавить комментарий