آموزش انواع داده های جاوا اسکریپت + تمرین آنلاین

انواع داده های جاوا اسکریپت

نوع داده یا دیتاتایپ یعنی نوع اطلاعاتی که یک متغیر جاوا اسکریپت می‌تواند ذخیره کند. در جاوا اسکریپت 7 نوع پایه یا پریمیتیو و 1 نوع غیر پایه وجود دارد.

نام دیتاتایپ

توضیح

نوع

Number

اعداد صحیح و اعشاری

پایه

BigInt

اعداد بزرگ (فراتر از محدودیت Number)

پایه

String

رشته ها (داده های متنی)

پایه

Boolean

بولین (درست / نادرست)

پایه

Null

تهی

پایه

Undefined

تعریف‌نشده

پایه

Symbol

کلید منحصر به فرد و یکتا

پایه

Object

شی ها (داده های پیچیده تر و گروهی)

غیرپایه

مقادیر پریمیتیو یا پایه

به طور کلی داده ها در جاوا اسکریپت به دو نوع پایه و غیرپایه تقسیم می‌شوند. به ساده ترین شکل داده ها پریمیتیو یا پایه گفته می‌شود. برای مثال عدد 10 یک مقدار پایه‌ای است. در ادامه 7 نوع داده پایه‌ای در جاوا اسکریپ را بررسی می‌کنیم:

نوع Number - اعداد

let myNum = 123;
myNum = 12.34;
myNum = -50;

نوع number در جاوا اسکریپت هم اعداد صحیح و هم اعداد اعشاری را شامل می‌شود. عملگر های زیادی مثل ضرب * ، تقسیم / ، جمع + ، تفریق - و ... برای کار با اعداد وجود دارد.

const a = 2 * 2;
const b = 10;
const c = a + b; // 4 + 10 = 14

از تابع Number هم می‌توان برای تبدیل نوع و ایجاد مقادیر عددی استفاده کرد. برای مثال:

Number("100"); // 100
Number("hello"); // NaN
Number(true); // 1
Number(false); // 0

در مثال بالا از انواع دیگر داده مثل رشته ("hello") و بولین (true) استفاده شده که بررسی خواهیم کرد.

نوع number علاوه بر اعداد، شامل مقادیر خاص Infinity ، -Infinity و NaN نیز است که در ادامه بررسی می‌کنیم:

  • مقدار Infinity همان بی‌نهایت ∞ ریاضی را نشان می‌دهد. این مقدار را می‌توانیم با تقسیم بر صفر به دست آوریم:

    alert( 1 / 0 ); // Infinity
    alert( 1 / -0 ); // -Infinity

    به صورت مستقیم هم می‌توانیم به آن دسترسی داشته باشیم:

    alert( Infinity ); // Infinity
  • مقدار NaN یک اشتباه محاسباتی را نشان می‌دهد. این مقدار معمولا نتیجه یک عملیات ریاضی اشتباه است. در مثال زیر اگر یک رشته را بر عددی تقسیم کنیم مقدار NaN را دریافت خواهیم کرد:

    alert( "some text" / 2 ); // NaN

    عملیات بیشتر روی NaN همیشه مقدار NaN را باز می‌گرداند:

    alert( NaN + 1 ); // NaN
    alert( 3 * NaN ); // NaN
    alert( "some text" / 2 - 1 ); // NaN

    فقط یک استثنا وجود دارد آن هم عملیات NaN ** 0 است که مقدار آن برابر 1 می‌باشد. NaN تنها مقداری در جاوا اسکریپت است که با خودش برابر نیست! برای مثال:

    alert( 1 === 1 ); // true
    alert( "hello" === "hello" ); // true
    alert( null === null ); // true
    alert( Infinity === Infinity ); // true
    
    alert( NaN === NaN ); // false

    از عملگر === برای بررسی برابر بودن دو مقدار استفاده می‌شود که در پست‌های بعدی با آن آشنا خواهیم شد.

    اگر بخواهیم بدانیم که یک مقدار NaN است یا خیر می‌توانیم از تابع Number.isNaN() استفاده کنیم:

    alert( Number.isNaN(NaN) ); // true
    alert( Number.isNaN("Hello" / 2) ); // true

توجه: نوع Number دارای محدودیت است و اعداد اعشاری خیلی خیلی کوچک یا اعداد صحیح خیلی خیلی بزرگ را پشتیبانی نمی‌کند. برای دانستن اینکه یک عدد صحیح در بازه درست قرار دارد یا نه، می‌توان از تابع Number.isSafeInteger() استفاده کرد.

در نسخه های بروز جاوا اسکریپت امکان جداسازی ارقام عدد برای خوانایی بهتر وجود دارد. این حالت صرفا برای بهبود خوانایی کد است و تاثیری در نتیجه کد ندارد. برای مثال:

const price = 20_000_000_000; // همان 20000000000

نوع BigInt - اعداد بزرگ

نوع BigInt جدیدا به جاوا اسکریپت اضافه شده است و در مرورگر های قدیمی مثل IE پشتیبانی نمی‌شود. این نوع برای پشتیبانی از اعداد صحیح بزرگ که خارج از محدوده نوع Number هستند، اضافه شده است. برای مثال:

// در آخر عدد یعنی نوع بیگ‌اینت n
const myBigNum = 1234567890123456789012345678901234567890n;

👈 اگر به انتهای یک عدد صحیح کاراکتر n را اضافه کنید، نوع آن BigInt می‌شود.

همچنین می‌توان از تابع BigInt برای تبدیل نوع و ایجاد مقادیر BigInt استفاده کرد:

BigInt(100); // 100n

نوع String - رشته‌ها

در جاوا اسکریپت داده های متنی به صورت رشته یا string ذخیره می‌شوند. رشته ها را می‌توان با دابل کوتیشن " یا کوتیشن تکی ' و یا بک‌تیک ` تعریف کرد:

const string1 = "this is a test";
const string2 = 'this is a test';
const string3 = `this is a test`;

همچنین می‌توان از تابع String برای تبدیل نوع و ایجاد مقادیر رشته ای استفاده کرد:

const string4 = String(5); // "5"

اگر موقع تعریف رشته از کاراکتر بک‌تیک یا همان ` استفاده کنید، می‌توانید داخل آن مستقیما کدی قرار دهید که اجرا شده و نتیجه اش به رشته اضافه شود. برای اینکار باید کد موردنظر را داخل ${} در رشته بنویسید:

alert( `two + two is ${2 + 2}` ); // "two + two is 4"

همچنین در تعریف ` امکان قرار دادن خط جدید (newline) داخل رشته وجود دارد ولی اگر از " یا ' استفاده کنید اینکار خطا می‌دهد:

// ✔ درست
let myText = `this is a 
test`;

// ⚠ خطا!
myText = "this is a 
test";

رشته ها دارای متد ها و ویژگی های مختلفی هستند که می‌توانیم از آنها استفاده کنیم. مثلا برای به دست آوردن طول رشته (چند کاراکتر است) می‌توانیم از ویژگی length رشته استفاده کنیم:

alert( "سلام".length ); // 4

و یا برای تبدیل به حروف بزرگ یا کوچک از متد های زیر استفاده کنیم:

alert( "Hello World".toLowerCase() ); // "hello world"
alert( "Hello World".toUpperCase() ); // "HELLO WORLD"

کاراکتر های ویژه داخل رشته

کاراکتر های ویژه یا special characters کاراکتر هایی هستند که چیز متفاوتی از آنچه تایپ می‌کنید را ایجاد می‌کنند. برای مثال عبارت \n معادل خط جدید است و درصورت قرار گرفتن داخل رشته، بجای آن یک خط جدید قرار داده می‌شود. یعنی دو رشته زیر باهم برابر هستند:

let str1 = "Hello\nWorld";
let str2 = `Hello
World`;

alert( str1 === str2 ); // true

برخی از این کاراکتر های ویژه را می‌توانید در جدول زیر مشاهده کنید:

کاراکتر

توضیح

\n

خط جدید

\r

در سیستم عامل ویندوز ترکیب \r\n نشان دهنده خط جدید است، درحالی که در سیستم عامل های دیگر فقط \n استفاده می‌شود. این قضیه دلایل تاریخی دارد و درحال حاضر اکثر نرم افزار های ویندوز هم قادر به تشخیص فقط \n برای خط جدید هستند.

\'\"\`

قرار دادن دابل کوتیشن، تک کوتیشن یا بک‌تیک داخل رشته. برای مثال: let str = 'It\'s a nice car'
فقط زمانی که رشته با همان کاراکتر تعریف شده باشد لازم است. مثلا در اینجا نیاز نیست: let str = "It's a nice car"

\\

کاراکتر بک‌اسلش

\t

کاراکتر تب

نوع Boolean - بولین

نوع بولین فقط دو مقدار true و false دارد. مثل درست/نادرست یا بله/خیر که true به معنی درست بودن و false به معنی نادرست بودن است. مقدار بولین می‌تواند نتیجه عملیات مقایسه‌ای باشد. برای مثال:

let isGreater = 4 > 1;

alert( isGreater ); // true

در مثال بالا > یک عملگر مقایسه‌ای است و چون 4 بزرگتر از 1 است، نتیجه این عملیات true شده است. در پست های بعدی با عملگر ها بیشتر آشنا خواهیم شد.

به صورت مستقیم هم می‌توانیم مقادیر true یا false را استفاده کنیم:

let isChecked = false;

isChecked = true;

همچنین می‌توان از تابع Boolean برای تبدیل نوع و ایجاد مقادیر true و false استفاده کرد:

alert( Boolean(1) ); // true
alert( Boolean(-5) ); // true
alert( Boolean(0) ); // false

alert( Boolean("hello") ); // true
alert( Boolean("") ); // false
alert( Boolean("0") ); // true

از مقدار بولی معمولا در شروط if else هم استفاده می‌شود که در پست‌های بعدی خواهیم دید.

نوع Null - تهی

نوع داده Null فقط شامل یک مقدار یعنی null است که در هیچ یک از انواع داده‌های دیگر قرار نمی‌گیرد. مقدار null یا تهی زمانی استفاده می‌شود که بخواهیم بگوییم هیچ مقداری وجود ندارد.

let age = null;

در مثال بالا مقدار متغیر age نامشخص است به همین خاطر null داده شده است.

اگر null را تبدیل به نوع بولی کنیم مقدار false را دریافت می کنیم:

alert( Boolean(null) ); // false

نوع Undefined - تعریف‌نشده

نوع داده Undefined هم مانند Null فقط شامل یک مقدار یعنی undefined است. مقدار undefined یعنی هیچ مقداری تعریف نشده است. اگر هنگام تعریف یک متغیر، هیچ مقداری به آن ندهیم، به صورت پیش‌فرض دارای مقدار undefined خواهد بود.

let age;

alert( age === undefined ); // true

همچنین می‌توانیم بعدا به یک متغیر خودمان مقدار undefined بدهیم ولی اینکار توصیه نمی‌شود:

let age = 18;

age = undefined;

alert( age === undefined ); // true

💡 نکته:

بهتر است زمانی که عمدا می‌خواهید بگویید مقدار یک متغیر نامشخص است، از null بجای undefined استفاده کنید تا بعدا امکان تفکیک این دو حالت که مقدار نامشخص داده شده (null) یا هیچ مقداری داده نشده (undefined) را داشته باشید.

اگر undefined را هم تبدیل به نوع بولی کنیم مقدار false را دریافت می کنیم:

alert( Boolean(undefined) ); // false

تفاوت null و undefined

در جاوا اسکریپت null و undefined دارای دو نوع داده متفاوت از هم هستند و دو معنی متفاوت دارند: undefined یعنی یک متغیر تعریف شده ولی هنوز مقداری به آن داده نشده است در حالی که null یعنی یک متغیر تعریف شده و مقدار نامشخص یا تهی به آن داده شده است.

نوع Symbol

یک symbol در جاوا اسکریپت یک مقدار منحصر به فرد و غیرقابل تغییر است. این نوع داده معمولا برای ساخت کلید های یکتا در آبجکت ها استفاده می‌شوند (در ادامه با نوع آبجکت آشنا خواهیم شد). هدف از سیمبل ایجاد کلید منحصر به فردی است که احتمال تداخل با کلید های دیگر را نداشته باشد. نحوه تعریف سیمبل:

const sym1 = Symbol();
const sym2 = Symbol("foo");
const sym3 = Symbol("foo");

در مثال بالا متغیر های sym2 و sym3 برابر نیستند چون سیمبل همیشه یکتا و منحصر به فرد است:

alert ( sym2 === sym3 ); // false

آبجکت ها

نوع Object در جاوا اسکریپت برای ذخیره و کار با داده های پیچیده‌تر از پریمیتیو ها استفاده می‌شود. آبجکت ها معمولا حاوی گروهی از داده ها و کلید ها هستند که با استفاده از کلید ها می‌توانیم به داده ها دسترسی پیدا کنیم.

ساده ترین راه تعریف یک آبجکت در جاوا اسکریپت استفاده از {} است:

let user = {};

در مثال بالا متغیر user حاوی یک آبجکت خالی است. به صورت زیر می‌توانیم یک آبجکت حاوی اطلاعات تعریف کنیم:

let user = {
  name: "Reza",   // کلید: name مقدار: string => "Reza"
  age: 30,        // کلید: age مقدار: number => 30
  isAdmin: false, // کلید: isAdmin مقدار: boolean => false
};

آبجکت user در مثال بالا حاوی سه ویژگی (یا پراپرتی) name و age و isAdmin است. یعنی در واقع با یک آبجکت توانستیم اطلاعات مختلف راجع به یک شئ واحد را یکجا ذخیره کنیم.

دسترسی به مقدار هر ویژگی در آبجکت با استفاده از کلید آن امکان پذیر است:

alert( user.name ); // "Reza"

پس از تعریف، امکان تغییر ویژگی وجود دارد:

user.name = "Ali";

alert( user.name ); // "Ali"

دقیقا به همین صورت می‌توانیم ویژگی جدید به آبجکت اضافه کنیم:

user.job = "developer";

alert( user.job ); // "developer"

برای حذف ویژگی هم می‌توانیم از کلیدواژه delete استفاده کنیم:

delete user.age;

alert( user.age ); // undefined

برخی نکات و ترفند ها

  • هنگام دسترسی به ویژگی آبجکت اگر آن ویژگی وجود نداشته باشد مقدار undefined بازگردانده می‌شود.

  • برای چک کردن اینکه آیا یک کلید در آبجکت وجود دارد یا خیر، می‌توانید از کلیدواژه in استفاده کنید:

    const car = {
      name: undefined,
    };
    
    alert ( "name" in car ); // true
    alert ( "brand" in car ); // false
  • قرار دادن ویژگی هایی که در نام آنها کاراکترهای خاص مثل فاصله وجود دارد با استفاده از [] انجام می‌شود:

    const user = {
      ["first name"]: "Reza",
    };
    
    alert ( user["first name"] ); // "Reza"
  • حتی اگر خود آبجکت با const تعریف شده باشد و قابل تغییر نباشد، ویژگی‌هایش قابل تغییر هستند:

    const user = { name: "Reza" };
    
    user.name = "Ali"; // درست
    
    user = { name: "Ali" }; // ⚠ خطا
  • آبجکت می‌تواند حاوی آبجکت های دیگر و در کل هر نوع داده دیگری باشد:

    const article = {
      title: "آموزش جاوا اسکریپت",
      isPublished: true,
      author: {
        name: "Ali",
        age: 50,
      },
    };
  • برای قرار دادن متغیر ها در یک آبجکت، اگر متغیر ها با ویژگی ها هم اسم باشند می‌توان به این صورت کوتاه شده نوشت:

    const name = "Reza";
    const age = 20;
    
    // کوتاه شده
    const user = { name, age };
    
    // عادی
    // const user = { name: name, age: age }
    
    // ولی اگر ویژگی ها هم اسم نباشند مجبوریم
    // const user = { theName: name, theAge: age }
  • نسخه کوتاه شده برای استخراج ویژگی های یک آبجکت به درون متغیر ها نیز به این شکل است:

    const user = {
      name: "Reza",
      age: 50,
      isAdmin: true,
    };
    
    // کوتاه شده
    const { name, isAdmin } = user
    
    // عادی
    // const name = user.name;
    // const isAdmin = user.isAdmin;
    
    alert ( name ); // "Reza"
    alert ( isAdmin ); // true
  • برای به دست آوردن همه مقادیر و کلید های یک آبجکت می‌توانید از یک حلقه for..in استفاده کنید:

    const user = {
      name: "Reza",
      age: 50,
      isAdmin: true,
    };
    
    // کد آلرت به ازای هر ویژگی یعنی در کل سه بار اجر ا می‌شود
    for (const key in user) {
      alert( user[key] );
    }

    توجه کنید که ترتیب ممکن است متفاوت باشد. یعنی شاید حلقه بالا به همان ترتیبی که ویژگی ها را تعریف کردیم اول name سپس age و بعد isAdmin نباشد و ترتیب متفاوت باشد. در پست های بعدی به طور مفصل حلقه ها را بررسی خواهیم کرد.

  • آبجکت ها برخلاف پریمیتیو ها، دارای رفرنس به حافظه هستند و اگر دو متغیر را برابر دقیقا همان آبجکت قرار دهید، تغییرات اعمال شده روی یکی، در دیگری هم منعکس می‌شوند. برای مثال:

    const user1 = { name: "Reza" };
    const user2 = user1;
    
    alert( user1 === user2 ); // true
    
    user1.name = "Ali";
    
    alert( user1.name ); // "Ali"
    alert( user2.name ); // "Ali" !!!

    توجه کنید که در مثال زیر با وجود برابر بودن مقادیر، دقیقا همان آبجکت داده نشده:

    const user1 = { name: "Reza" };
    const user2 = { name: "Reza" };
    
    alert( user1 === user2 ); // false
    
    user1.name = "Ali";
    
    alert( user1.name ); // "Ali"
    alert( user2.name ); // "Reza" همچنان

آرایه ها

آرایه ها در جاوا اسکریپت نوعی آبجکت هستند و آنها نیز برای نگهداری گروهی از مقادیر استفاده می‌شوند. تفاوت آرایه در این است که مقادیر آن دارای ترتیب مشخص هستند. یک آرایه به این صورت تعریف می‌شود:

const emptyArray = []; // یک آرایه خالی

const names = ["Sara", "Ali", "Hamed"];

دسترسی به مقادیر آرایه با استفاده از شماره ایندکس (همان نمایه یا اندیس) امکان پذیر است:

alert( names[0] ); // "Sara"
alert( names[1] ); // "Ali"
alert( names[2] ); // "Hamed"

alert( names[15] ); // undefined

👈 توجه: شماره ایندکس آرایه از صفر شروع می‌شود نه یک!

امکان تغییر مقدار یک ایندکس وجود دارد:

names[1] = "Diana";

alert( names[1] ); // "Diana"

برای دانستن اینکه آرایه چند آیتم دارد می‌توانید از ویژگی length آن استفاده کنید:

alert( names.length ); // 3

برای اضافه کردن یک آیتم جدید به آرایه از متد push آرایه استفاده کنید:

names.push("Hesam");

alert( names.length ); // 4

یک آرایه می‌تواند از ترکیب هر نوع مقادیری تشکیل شده باشد:

let values = ["Reza", 10, true, { age: 24 }, [1,2,3], null];

alert( values[3].age ); // 24
alert( values[4][1] ); // 2

برای به دست آوردن همه مقادیر یک آرایه می‌توانید از یک حلقه for..of استفاده کنید:

// کد آلرت به ازای هر آیتم یعنی در کل شش بار اجر ا می‌شود
for (const value in values) {
  alert( value );
}

حلقه به همان ترتیبی که آیتم ها را در آرایه قرار داده اید، اجرا می‌شود. بعدا حلقه ها را به طور کامل بررسی خواهیم کرد.

لطفا توجه کنید که یک آرایه در واقع نوعی آبجکت است پس قانون رفرنس به حافظه در اینجا هم صدق می‌کند:

const one = [1, 1, 1, 1];
const two = one;

one[3] = 99;

alert( two[3] ); // 99 !!!

توابع

توابع در جاوا اسکریپت زیر مجموعه نوع آبجکت محسوب می‌شوند. یک تابع یعنی یک قطعه کد که به طور مکرر قابل فرار خوانی و اجرا در قسمت های دیگر کد است. یعنی یک عملکرد را یکبار کدنویسی می‌کنیم و بعدا هر جا نیاز بود فقط استفاده می‌کنیم. مثلا alert یک تابع است که از قبل در مرورگر تعریف شده و ما برای نمایش متن به کاربر استفاده می‌کنیم.

تعریف تابع به روش های مختلفی امکان پذیر است:

// روش اول
function sayHi () {
  alert( "Hello" );
}
// روش دوم
const sayHi = function () {
  alert( "Hello" );
}
// روش سوم
const sayHi = () => {
  alert( "Hello" );
}

برای استفاده از یک تابع (یعنی فراخوانی و اجرای کد های داخل آن) می‌توانیم اسم تابع را همراه با پرانتز بنویسیم:

sayHi()

در مثال بالا کد داخل تابع یعنی alert( "Hello" ) اجرا خواهد شد.

ورودی و خروجی تابع

توابع می‌توانند یک یا چند ورودی بگیرند و پس از اجرا، یک خروجی بازگردانند:

function sum (numOne, numTwo) {
  const result = numOne + numTwo;
  return result;
}

در مثال بالا تابع موردنظر دو ورودی numOne و numTwo را دریافت می‌کند و پس از محاسبه جمع دو عدد، نتیجه را در خروجی برمی‌گرداند. ورودی ها در واقع متغیر هایی هستند که داخل تابع وجود دارند و مقادیر آنها را موقع استفاده مشخص می‌کنیم:

const value = sum(3, 7);

alert( value ); // 10

ورودی ها می‌توانند مقدار پیشفرض داشته باشند که در این‌صورت وارد کردنشان اختیاری می‌شود. برای مثال:

function divide (num, divideBy = 2) {
  return num / divideBy;
}

divide(12); // 6
divide(12, 3); // 4

توابع نیز مانند هر مقدار دیگری می‌توانند به عنوان ویژگی آبجکت ها یا داخل آرایه ها قرار بگیرند:

const myObj = {
  div: function (a, b) {
    return a / b;
  },

  sum (a, b) {           // function اینجا بدون کلمه
    return a + b;
  },

  sub: (a, b) => a - b,  // return کوتاه شده، حتی بدون نیاز به کلمه
};

const myArr = [1, 3, () => { alert('hi') }, 5, 7];

تشخیص نوع با typeof

عملگر typeof نوع یک مقدار را نشان می‌دهد. این عملگر یک رشته حاوی اسم نوع موردنظر را برمی‌گرداند.

let myNum = Infinity;
alert( typeof myNum ); // "number"

alert( typeof "hello" ); // "string"

alert( typeof true ); // "boolean"

در جدول زیر تمام مقادیری که typeof می‌تواند برگرداند، قرار داده شده است:

نوع

نتیجه typeof

Undefined

"undefined"

Null

"object" (به دلایل تاریخی)

Boolean

"boolean"

Number

"number"

BigInt

"bigint"

String

"string"

Symbol

"symbol"

Function

"function"

هر آبجکت دیگر (آرایه و ...) جز تابع

"object"

برای مثال:

typeof undefined // "undefined"

typeof 0 // "number"

typeof 10n // "bigint"

typeof true // "boolean"

typeof "hello" // "string"

typeof Symbol("hi") // "symbol"

typeof { age: 25 } // "object"

typeof [1, 2, 3] // "object"

typeof null // "object"  توضیح علت در زیر 

typeof alert // "function"

👈 توجه:

typeof null به دلایل تاریخی، مقدار اشتباه "object" را برمی‌گرداند و همیشه موقع استفاده از عملگر typeof برای شناسایی آبجکت ها، باید null نبودن را نیز همزمان چک کنیم:

let myVar;

// ...

if (typeof myVar === "object" && myVar !== null) {
  alert( "حتما یک آبجکت است" )
}

در مثال بالا if یک شرط است که کد داخل آن فقط زمانی اجرا می‌شود که عبارت داخل پرانتز true باشد. عملگر && هم دو عبارت بولی را باهم AND می‌کند و نتیجه عبارت کلی زمانی true است که هر دو عبارت true باشند. در پست های بعدی به طور مفصل با if و عملگر ها آشنا خواهیم شد.

هنگام استفاده از typeof باید دقت کنید که اولویت عملیاتی آن بالا است یعنی اول آن محاسبه می‌شود و سپس عملیات دیگر. برای مثال:

alert ( typeof 1 + 999 ); // => "number" + 999 => "number999"

اگر بخواهید typeof بعد از عملیات محاسبه شود می‌توانید از پرانتز استفاده کنید:

alert ( typeof (1 + 999) ); // => typeof 1000 => "number"

💡 نکته:

برای اینکه بفهمیم نوع یک داده آرایه است یا خیر نمی‌توانیم از typeof استفاده کنیم چون برای آرایه ها نیز مقدار "object" را برمی‌گرداند. اما روشی برای اینکار وجود دارد و آن هم استفاده از Array.isArray() است:

alert( Array.isArray([1, 2, 3]) ); // true

نوع‌دهی پویا و ضعیف

جاوا اسکریپت یک زبان با نوع داده پویا یا دینامیک است. معمولا در سایر زبان های برنامه نویسی هنگام تعریف و مقدار دهی یک متغیر، نوع داده آن نیز مشخص می‌شود و بعدا اگر مقداری با نوع داده متفاوت به آن متغیر داده شود، خطا رخ می‌دهد. ولی در جاوا اسکریپت چنین نیست و یک متغیر دارای نوع ثابتی نیست و می‌تواند بعدا مقداری با نوع دیگر نیز دریافت کند. به چنین حالتی "نوع داده پویا" می‌گویند.

let foo = 42; // نوع عددی
foo = "bar"; // نوع رشته‌ای
foo = true; // نوع بولی

همچنین زمانی که لازم باشد، جاوا اسکریپت نوع مقادیر را به صورت خودکار تغییر می‌دهد. برای مثال شما می‌توانید یک رشته که حاوی فقط ارقام است را با یک عدد مقایسه کنید و جاوا اسکریپت در لحظه مقایسه، رشته را تبدیل به عدد می‌کند:

alert( "5" < 6 ); // true

یک نکته مهم این است که عملگر + برای به هم پیوستن دو رشته هم استفاده می‌شود:

alert ( "Hello" + "World" ); // "HelloWorld"

👈 اگر یک طرف این عملگر رشته باشد، همه مقادیر را تبدیل به رشته کرده و سپس محاسبه می‌کند. یعنی باید حواستان باشد که نتیجه کد "2" + 2 می‌شود "22" در حالی که نتیجه کد 2 + 2 می‌شود 4

تمرین آنلاین

در کدباکس زیر می‌توانید به صورت آنلاین تمرین کنید. نوع و مقدار متغیر های a و b را تغییر دهید و نتیجه را ببینید: (ابتدا تب نتیجه کد را باز کنید)

امیدوارم این مطلب برای شما مفید واقع شده باشه 🙏
اگر مایل به ادامه یادگیری هستید آموزش بعدی را از دست ندهید 👇


کامنت ها