Галоўная > Разбор пытанняў з рэальных сумоўяў - JS Core. Boxing і unboxing.

Разбор пытанняў з рэальных сумоўяў - JS Core. Boxing і unboxing.

сумоўе js beginner

Пытанне:

Адкуль метады ў прымітыўных тыпаў даных? Што такое boxing і unboxing?

Кароткі адказ

У прымітыўных тыпаў даных, акрамя null і undefined, ёсць метады, да якіх мы можам звярнуцца.

Метады возьмуцца з убудаванага прататыпа канструктара адпаведнага тыпу. Невідавочна ствараецца абгортка з канструктара, выкарыстоўваецца неабходны метад. Адразу пасля выкарыстоўвання абгортка выдаляецца.

Гэты працэс называецца адпаведна boxing і unboxing.

Падрабязны адказ

У прымітыўных тыпаў даных, акрамя null і undefined, ёсць метады, да якіх мы можам звярнуцца.

Напрыклад:

'hello'.toUpperCase(); Адкуль узяліся метады ў прымітыўных тыпаў даных?

Для кожнага прымітыўнага тыпу даных, акрамя null і undefined, існуе свой убудаваны канструктар, з якога і возьмуцца неабходныя метады.

Напрыклад, пры выкананні наступнага кода

const greeting = 'hello'.toUpperCase(); 'hello' абгорнецца "пад капотам" у

new String('hello').toUpperCase(); Метад toUpperCase возьмецца з прататыпа каструктара String. Гэты працэс называецца boxing.

Такое абгортванне кода не азначае, што зараз наша прымітыўнае строкавае значэнне стала аб'ектам, бо адразу пасля выкарыстоўвання адбываецца адваротны працэсс распакоўкі аб'ектных тыпаў назад у прымітывы, які называецца unboxing.

const greeting = 'hello'.toUpperCase();

console.log(typeof greeting);

// string Увесь гэты працэс мае назву auto boxing.

Калі нам патрэбна відавочна прывесці адзін тып даных да другога, можна выкарыстоўваць канструктар патрэбнага тыпу, але без new:

const number = Number("1");
console.log(typeof number);
// number

Чаму непажадана відавочна выкарыстоўваць new Number("1")?

const number = new Number("1");

console.log(number === 1);

// false

console.log(typeof number);

// object

Відавочнае абгортванне значэння называецца manual autoboxing.

loveJS, 2023-02-02
Каментары

    (Каб даслаць каментар залагуйцеся ў свой уліковы запіс)

    ;