Стандартни вградени обекти в EcmaScript

Вградени обекти (built-in objects)

Въведение

В JavaScript съществуват няколко (със всяка версия се увеличават) вградени обекти/конструктори на обекти, чрез които се разширява функционалността и гъвкавостта на езика. Например:

            // using built in Math object
            console.log( Math.max(2,12,5)); // 12

            // using built in Date() constructor
            let currentDate = new Date();
            console.log( currentDate.getFullYear() ); // 2018
        

Някои от най-често използваните вградени обекти/функции са:

Math
Date
String
Number
Array

Ако сте любопитни относно другите: Standard built-in objects @MDN

Работа с дати (Date objects)

Текущата дата и време в компютърните системи се представят като брой милисекунди изминали от началото на епохата (1 January 1970 UTC)
За да работим с измерения, като година, месец, час и пр. трябва да използваме вградените методи на обект от тип Date, който създаваме като използваме конструктора Date()

                let currentDateTimeObj = new Date();
            
Справочник: Date @MDN

getCurentTimeFormated - пример

See the Pen getCurentTimeFormated by Iva Popova (@webdesigncourse) on CodePen.

calcUserAge - пример

See the Pen calcUserAge by Iva Popova (@webdesigncourse) on CodePen.

dateObjectForTimingCode - пример

See the Pen Date object for timing code by Iva Popova (@webdesigncourse) on CodePen.

arguments object

За да имплементираме функция с променлив брой параметри в JavaScript можем да използваме вградения обект arguments
Той се използва единствено в тяло на функция и съдържа подобна на масив структура с аргументите подадени към функцията.

            // using built in arguments object - available within functions only!
            function sum(){
                sum = 0;
                for (let i = 0; i < arguments.length; i++){
                    sum += arguments[i];
                }
                console.log("sum = " + sum);
            }
            sum(1,2,3); // 6
            sum(1,2,3,4); // 10
        

built-in objects == primitive types?

Много често примитивните типове string, number, boolean се бъркат със съответните им "двойници - обекти: String, Number, Boolean


            let str1 = new String("ada");
            let str2 = "ada";

            console.log( typeof(str1) ); // object
            console.log( typeof(str2) ); // string
        

и макар и привидно еднакви, не бива да се забравя, че те все пак са различни неща!

primitive objects wrapping

Когато опитаме да използваме примитивен тип ( string, number и пр.) като обект, например:


            // примитивните типове не са обекти и нямат пропъртита, но:
            "ada".toUpperCase(); // "ADA"
        

това, което прави JavaScript e да "обвие" примитивният тип в обект от съответния тип (в примера: String обекта) и да използва съответното свойство/метод (в примера: toUpperCase).

best practises

Въпреки че можем да създадем и работим с число, което е създадено като обект (същото е в сила и за останалите типове), на практика се предпочита използването на примитивния тип.

Например:


            // create number - the good way (as primitive)
            let x = 42;

            // create number - the bad way (as Number object)
            let y = new Number(42);

            // we can use it the same way:
            console.log( x + 10 ); // 52
            console.log( x.toPrecision(5) ); // "42.000"

            console.log( y + 10 ); // 52
            console.log( y.toPrecision(5) ); // "42.000"

            // but "x" and "y" are different entities with same value
            console.log( x == y )  // true
            console.log( x === y ) // false
        

best practises

Разбира се, използването на методите на вградените обекти е необходимо и се препоръчва (по важните от тях бяха разгледани в съответните теми за Strings и Arrays)

Например:


            let str = "ada";
            console.log( str.toUpperCase() ); // ADA

            var arr = [1,2,3];
            console.log( arr.reverse() );  // [3, 2, 1]
        

Readings

The Secret Life of JavaScript Primitives

These slides are based on

customised version of

Hakimel's reveal.js

framework