<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Dr Codewell</title>
    <description>The latest articles on DEV Community by Dr Codewell (@kenneth732).</description>
    <link>https://dev.to/kenneth732</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F857144%2Ff131cf57-c07f-4585-8e0d-4f708a3cc272.jpeg</url>
      <title>DEV Community: Dr Codewell</title>
      <link>https://dev.to/kenneth732</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kenneth732"/>
    <language>en</language>
    <item>
      <title>StrictJS</title>
      <dc:creator>Dr Codewell</dc:creator>
      <pubDate>Sun, 25 Jan 2026 09:30:02 +0000</pubDate>
      <link>https://dev.to/kenneth732/strictjs-4oab</link>
      <guid>https://dev.to/kenneth732/strictjs-4oab</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwpw31dk4jtmsmw28gwqi.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwpw31dk4jtmsmw28gwqi.jpeg" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  StrictJS Part 1: Rethinking Numbers and Strings in JavaScript
&lt;/h1&gt;

&lt;p&gt;JavaScript is one of the most successful programming languages ever created.&lt;br&gt;
It runs everywhere, scales from small scripts to massive systems, and powers the modern web.&lt;/p&gt;

&lt;p&gt;But its success came with a trade-off.&lt;/p&gt;

&lt;p&gt;Over the years, we’ve normalized silent coercions, implicit conversions, and runtime surprises as “just how JavaScript works.” We write defensive code, add endless checks, and hope bugs don’t surface in production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;StrictJS&lt;/strong&gt; is my attempt to step back and ask a simple question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What if JavaScript values actually meant what they said?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In this first post, I’ll start at the foundation: &lt;strong&gt;numbers and strings&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Problem With JavaScript Numbers
&lt;/h2&gt;

&lt;p&gt;JavaScript has only one numeric type: &lt;code&gt;Number&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That decision simplified the language early on, but it also introduced behavior that most developers eventually learn to &lt;em&gt;work around&lt;/em&gt; instead of &lt;em&gt;trust&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Consider this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;5&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;   &lt;span class="c1"&gt;// "51"&lt;/span&gt;
&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;5&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;   &lt;span class="c1"&gt;// 4&lt;/span&gt;
&lt;span class="mf"&gt;0.1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;0.2&lt;/span&gt; &lt;span class="c1"&gt;// 0.30000000000000004&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;None of these are bugs. They are design decisions.&lt;/p&gt;

&lt;p&gt;But they also mean:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Values silently change meaning&lt;/li&gt;
&lt;li&gt;Types lie about intent&lt;/li&gt;
&lt;li&gt;Errors show up late, not early&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In real systems—financial calculations, counters, async pipelines—this is dangerous.&lt;/p&gt;

&lt;p&gt;StrictJS does not try to “fix” JavaScript.&lt;br&gt;
It simply refuses to guess.&lt;/p&gt;


&lt;h2&gt;
  
  
  Strict Numbers in StrictJS
&lt;/h2&gt;

&lt;p&gt;In StrictJS, a number is not just a value.&lt;br&gt;
It is a &lt;strong&gt;contract&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Core principles:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;No implicit coercion&lt;/li&gt;
&lt;li&gt;Explicit creation only&lt;/li&gt;
&lt;li&gt;Operations fail fast&lt;/li&gt;
&lt;li&gt;Intent matters more than convenience&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;StrictNumber&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;StrictNumber&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;5&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// ❌ Error&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If something is a string, it stays a string.&lt;br&gt;
If something is a number, it behaves like one.&lt;/p&gt;

&lt;p&gt;Operations are explicit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;        &lt;span class="c1"&gt;// ✅ StrictNumber(6)&lt;/span&gt;
&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;      &lt;span class="c1"&gt;// ❌ Type error&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This might feel strict at first—but that’s the point.&lt;/p&gt;

&lt;p&gt;I would rather see an error &lt;strong&gt;while writing code&lt;/strong&gt; than debug it &lt;strong&gt;months later in production&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Matters in Real Systems
&lt;/h2&gt;

&lt;p&gt;Silent numeric coercion doesn’t usually break small demos.&lt;br&gt;
It breaks &lt;strong&gt;long-lived systems&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Financial calculations drift&lt;/li&gt;
&lt;li&gt;Counters misreport&lt;/li&gt;
&lt;li&gt;API boundaries blur&lt;/li&gt;
&lt;li&gt;Async pipelines amplify small mistakes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Strict numbers move these failures to the surface, where they belong.&lt;/p&gt;

&lt;p&gt;Early errors are cheaper than late surprises.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Problem With JavaScript Strings
&lt;/h2&gt;

&lt;p&gt;Strings in JavaScript often pretend to be something else.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;5&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;        &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;true&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="c1"&gt;// false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Strings cross system boundaries:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User input&lt;/li&gt;
&lt;li&gt;JSON payloads&lt;/li&gt;
&lt;li&gt;Network responses&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Yet JavaScript frequently treats them as &lt;em&gt;almost numbers&lt;/em&gt;, &lt;em&gt;almost booleans&lt;/em&gt;, or &lt;em&gt;almost anything&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;In practice, this leads to ambiguity.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A string that looks like data is not data.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Strict Strings in StrictJS
&lt;/h2&gt;

&lt;p&gt;In StrictJS, a string is always just a string.&lt;/p&gt;

&lt;p&gt;No automatic casting.&lt;br&gt;
No silent parsing.&lt;br&gt;
No assumptions.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;StrictString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Kenneth&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;age&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;StrictString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;25&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nx"&gt;age&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;        &lt;span class="c1"&gt;// ❌ Error&lt;/span&gt;
&lt;span class="nx"&gt;age&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toNumber&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;// ✅ Explicit conversion&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Parsing is not an accident.&lt;br&gt;
It is a decision.&lt;/p&gt;

&lt;p&gt;By forcing explicit conversion, StrictJS makes intent visible in code. When someone reads it months later, there is no ambiguity about what is happening.&lt;/p&gt;




&lt;h2&gt;
  
  
  JavaScript vs StrictJS (Quick Comparison)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Operation&lt;/th&gt;
&lt;th&gt;JavaScript&lt;/th&gt;
&lt;th&gt;StrictJS&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;"5" + 1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;"51"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌ Error&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;"5" - 1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;4&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌ Error&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0.1 + 0.2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Precision loss&lt;/td&gt;
&lt;td&gt;Explicit handling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;String → Number&lt;/td&gt;
&lt;td&gt;Implicit&lt;/td&gt;
&lt;td&gt;Explicit only&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;StrictJS doesn’t try to be clever.&lt;br&gt;
It tries to be honest.&lt;/p&gt;




&lt;h2&gt;
  
  
  What’s Next
&lt;/h2&gt;

&lt;p&gt;This post only covers the foundation.&lt;/p&gt;

&lt;p&gt;In the next parts, I’ll dive into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Strict booleans&lt;/li&gt;
&lt;li&gt;Strict objects and schemas&lt;/li&gt;
&lt;li&gt;Async execution with guarantees&lt;/li&gt;
&lt;li&gt;Memory-aware JavaScript&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;StrictJS is not about replacing JavaScript.&lt;/p&gt;

&lt;p&gt;It’s about &lt;strong&gt;disciplining it&lt;/strong&gt;—bringing back clarity, intent, and trust in our code.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>programming</category>
      <category>showdev</category>
      <category>webdev</category>
    </item>
    <item>
      <title>"Acquire Proficiency in JavaScript Code Integration Through the Development of a Task Manager Application."</title>
      <dc:creator>Dr Codewell</dc:creator>
      <pubDate>Sun, 10 Sep 2023 13:55:30 +0000</pubDate>
      <link>https://dev.to/kenneth732/acquire-proficiency-in-javascript-code-integration-through-the-development-of-a-task-manager-application-d54</link>
      <guid>https://dev.to/kenneth732/acquire-proficiency-in-javascript-code-integration-through-the-development-of-a-task-manager-application-d54</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnbyniyo2q7xty1ob5ecb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnbyniyo2q7xty1ob5ecb.png" alt=" " width="502" height="547"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F72ulwgh4038w3qg32qzd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F72ulwgh4038w3qg32qzd.png" alt=" " width="497" height="490"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
