JS метод Object.toString()


Загальний опис

Метод Object.prototype.toString() - це вбудований метод в JavaScript, який дозволяє отримувати рядкове представлення об'єкта. Його основна суть полягає в конвертації об'єкта в рядок, що дозволяє ідентифікувати його тип. Зокрема, цей метод часто використовують для визначення типу об'єкта в умовах динамічної типізації в JavaScript.

Щоб використовувати Object.prototype.toString(), достатньо викликати його для будь-якого об'єкта. За замовчуванням, якщо ви не перевизначаєте метод для свого об'єкта, він поверне рядок у форматі "[object Type]", де "Type" - це тип об'єкта.

Наприклад:

const obj = {};
console.log(obj.toString()); // "[object Object]"

const arr = [1, 2, 3];
console.log(arr.toString()); // "1,2,3" (оскільки для масивів метод `toString` перевизначений)

Але можна також використовувати цей метод для визначення конкретного типу об'єкта:

const isDate = (obj) => Object.prototype.toString.call(obj) === '[object Date]';
console.log(isDate(new Date())); // true
console.log(isDate({})); // false

Важливо розуміти, що різні типи об'єктів можуть мати свої реалізації методу toString(), які повертають рядкове представлення об'єкта, відмінне від стандартного. Якщо вам потрібно отримати стандартне представлення об'єкта, завжди користуйтеся методом Object.prototype.toString.call(obj).

Також, якщо ви створюєте власний тип об'єкта і хочете, щоб його рядкове представлення було корисним, ви можете перевизначити метод toString для цього типу:

function Person(name, age) {
 this.name = name;
 this.age = age;
}

Person.prototype.toString = function() {
 return `Person named ${this.name} aged ${this.age}`;
}

const person = new Person("John", 30);
console.log(person.toString()); // "Person named John aged 30"

Зверніть увагу, що метод Object.prototype.toString() є одним із базових і дуже корисних методів у JavaScript, який дозволяє працювати з об'єктами.

автор: Bond

Порада

Якщо ви хочете змінити поведінку toString() для вашого власного об'єкта, ви можете перевизначити цей метод в прототипі вашого об'єкта. Однак будьте обережні, щоб не перезаписувати вбудований метод для всіх об'єктів.

Приклад коду:

function Dog(name) {
 this.name = name;
}
Dog.prototype.toString = function() {
 return `Dog named ${this.name}`;
};
const myDog = new Dog('Rex');
console.log(myDog.toString());  // 'Dog named Rex'
автор: Bond
Порада

Щоб перевірити, чи є об'єкт екземпляром певного класу або конструктора, використовуйте Object.prototype.toString(), адже цей метод менш чутливий до маніпуляцій порівняно із instanceof.

Приклад коду:

function isDate(obj) {
 return Object.prototype.toString.call(obj) === '[object Date]';
}
автор: Bond
Порада

Використовуючи Object.prototype.toString(), можна виявити об'єкти, які були створені в інших контекстах, таких як інші вікна або фрейми. Це корисно в сценаріях, де множинне вікно або крос-документний доступ є звичайним.

Приклад коду:

const iframe = document.createElement('iframe');
document.body.appendChild(iframe);
const iframeArray = new iframe.contentWindow.Array();
console.log(Object.prototype.toString.call(iframeArray));  // '[object Array]'
автор: Bond
Нотатка

Пам'ятайте, що метод Object.prototype.toString() безпосередньо повертає [object Type], де "Type" є типом об'єкта. Це може бути корисним для визначення внутрішнього типу об'єкта, особливо коли ви працюєте з різними видами об'єктів.

Приклад коду:

const arr = [];
console.log(arr.toString());       // ''
console.log(Object.prototype.toString.call(arr)); // '[object Array]'
автор: Bond

Синтаксис

toString()

Повернення

string

Повертає рядок, що представляє об'єкт у форматі [object Type], де "Type" вказує на внутрішній тип об'єкта. Тип може бути, наприклад, "Array", "Function", "Date" та іншими. Цей метод корисний для визначення конкретного внутрішнього типу об'єкта у випадках, коли типові методи перевірки можуть бути неточними.

автор: Bond

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
1 1 1 3 12 3
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
1 18 4 1
Підтримка: серверні переглядачі
Переглядач Node.js Deno
0.10.0 1.0

Приклади

+ запропонувати свій приклад у пісочниці

У цьому прикладі ми створимо користувацький об'єкт Person і перевизначимо для нього метод toString(). Це може бути корисно, наприклад, коли ви хочете логічно і зрозуміло відобразити ваш об'єкт у вигляді рядка.

function Person(name, age) {
  this.name = name;
  this.age = age;
}

// Перевизначаємо метод toString для об'єкта Person
Person.prototype.toString = function() {
  return `[Person: ${this.name}, Age: ${this.age}]`;
}

const person = new Person("Олег", 30);

console.log(person.toString()); // "[Person: Олег, Age: 30]"
автор: Bond

Цей приклад дозволяє користувачу вибирати тип даних зі спадного списку і, натискаючи кнопку, отримувати результат, який вказує на конкретний тип даних обраного елементу.

автор: Bond

У цьому прикладі ми використовуємо Object.prototype.toString() для визначення типу даних змінної. Метод toString() може допомогти нам отримати більш конкретний тип даних, ніж просто використання typeof.

const arr = [1, 2, 3];
const date = new Date();
const obj = {};

console.log(Object.prototype.toString.call(arr));  // "[object Array]"
console.log(Object.prototype.toString.call(date)); // "[object Date]"
console.log(Object.prototype.toString.call(obj));  // "[object Object]"

// Функція для визначення типу даних
function getType(value) {
  return Object.prototype.toString.call(value).slice(8, -1);
}

console.log(getType(arr));   // "Array"
console.log(getType(date));  // "Date"
console.log(getType(obj));   // "Object"
автор: Bond

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід