Това е една от малките, но важни концепции, с които един JS разработчик трябва да е запознат.

Тъй като Javascript е свободно въведен език, можем просто да декларираме блок памет и да го присвоим на низ, число, масив или обект. От нас зависи да присвоим препратката към паметта към който и да е от типовете данни. Но това не е концепцията със силно въведен език. Трябва да определите типа на променливата, преди да присвоите стойност. Езици като C, C++, Java и много други са силно типизирани. Ако идвате от езиков произход със силно въведен език, тази концепция ще изглежда шокираща за вас в началото.

И така, нека започнем с разликата между примитивните и непримитивните типове данни в JS.

В JS има 7 основни примитивни типа данни

  1. Номер
  2. BigInt
  3. низ
  4. Булева стойност
  5. Нула
  6. Недефиниран
  7. Символи

В JS има само 1 непримитивен тип данни

  1. Обекти (също включва масиви).

Каква е основната разлика между тях?

За всички примитивни типове данни можете да присвоите определена въведена стойност, същото не е в случай на не-примитивни. Нека го направим по-ясно с някои примери.

Нека разгледаме променлива, на която е присвоена стойност на низ, сега, ако добавя 10 към нея, тя ще преобразува 10 в низ и ще го добави след низа, а полученият тип ще бъде низ. Можете да го изпробвате върху типовете данни и да видите резултата.

Сега нека разгледаме обект като обект със свойства на типа var1 и var2. на един е присвоен низ и на един е присвоено число.

Надявам се, че тази основна разлика сега ви е ясна.

За повече подробности относно това можете да се обърнете към връзката по-долу.



Разлика в референтния тип

В примитивните типове данни, ако им бъде присвоена друга стойност, тяхната референция винаги се променя, но същото не се случва в концепцията за не-примитивните.

Помислете за примера по-горе, какъв ще бъде конзолираният изход за това. Можем просто да мислим за това като a и b се сравняват със стойностите, които съдържат, така че изходът е вярно и в двата случая.

Помислете за примера по-горе, какъв ще бъде конзолираният изход за това. Можем просто да мислим за това като obj и obj2 препращат към различни блокове памет, така че могат ли да бъдат равни? Никога, така че конзолираният изход ще бъде false.

Някои разработчици имат представа, че === сравнява само типа, а не стойността, което е грешно. Той сравнява както типовете, така и стойностите.