✍️ ظاهر عددی یک مقدار تضمین نمیکنه که واقعاً عدد باشد. رشته '20' با عدد 20 فرق دارد. اگر یک رشته وارد جمع با + بشه، ممکنه به جای جمع عددی، چسباندن متن اتفاق بیفته. null، false و رشته خالی هم با بعضی تبدیلها به صفر تبدیل میشن؛ این تبدیل همیشه خواسته ما نیست.
برای پذیرش فقط عددهای متناهی، Number.isFinite ابزار مناسبی است. این متد رشتهها را به عدد تبدیل نمیکنه و مقدارهای نامعتبر عددی مثل NaN و بینهایت را هم رد میکنه. در محیط JSON معمولی، این دو مقدار آخر مستقیم به عنوان داده ورودی نمیآیند؛ ولی عادت به بررسی متناهی بودن، قرارداد محاسبه را روشن نگه میداره.
در تمرین، عدد منفی و صفر معتبرند. فقط مقدارهایی را جمع کن که از قبل نوع عددی دارند و متناهیاند. خطای رایج، استفاده از Number(value) برای همه عضوهاست؛ این کار رشته عددی را هم قبول میکنه، در حالی که قرارداد ما آن را رد میکنه. خروجی خالی یا فهرست کاملاً نامعتبر باید صفر باشد.
فعالیت شما
sumValidNumbers(values) را بنویس. values آرایه مقدارهای JSON است. فقط عضوهایی با typeof برابر 'number' و Number.isFinite برابر true را جمع کن؛ صفر و منفی معتبرند و تبدیل نوع ممنوع است. [2,'3',null,-1] => 1، خالی یا فقط مقدار نامعتبر => 0.