Array creation is homogenous and predictable, or is it a hack?
TL;DR: Be very careful with Javascript Arrays.
- The Least surprise principle violation
-
Be as declarative as possible
-
Avoid creating Arrays with one argument.
Javascript has a lot of magic tricks.
Knowing them makes some developers proud and a sense of belonging to juniors.
A language should be intuitive, homogeneous, predictable, simple, and pure.
const arrayWithFixedLength = new Array(3);
console.log(arrayWithFixedLength); // [ <5 empty items> ]
console.log(arrayWithFixedLength[0]); // Undefined
console.log(arrayWithFixedLength[1]); // Undefined
console.log(arrayWithFixedLength[3]); // Undefined
console.log(arrayWithFixedLength[4]); // Undefined too
// But should be Index out of range
console.log(arrayWithFixedLength.length); // 3const arrayWithTwoElements = new Array(3, 1);
console.log(arrayWithTwoElements); // [ 3, 1 ]
console.log(arrayWithTwoElements[0]); // 3
console.log(arrayWithTwoElements[1]); // 1
console.log(arrayWithTwoElements[2]); // Undefined
console.log(arrayWithTwoElements[5]);
// Undefined (should be out of range)
console.log(arrayWithTwoElements.length); // 2
const arrayWithTwoElementsLiteral = [3,1];
console.log(arrayWithTwoElementsLiteral); // [ 3, 1 ]
console.log(arrayWithTwoElementsLiteral[0]); // 3
console.log(arrayWithTwoElementsLiteral[1]); // 1
console.log(arrayWithTwoElementsLiteral[2]); // Undefined
console.log(arrayWithTwoElementsLiteral[5]); // Undefined
console.log(arrayWithTwoElementsLiteral.length); // 2[X] Automatic
We can check for the notation with one argument and flag it as a warning.
- Complexity
Many "modern" languages are full of hacks to make life easier for programmers but are a source of potential undiscovered bugs.
Code Smell 06 - Too Clever Programmer
Code Smell 69 - Big Bang (JavaScript Ridiculous Castings)
Code Smell 93 - Send me Anything
Code Smells are just my opinion.
Photo by Ryan Quintal on Unsplash
Originally on this tweet:
When someone says, "I want a programming language in which I need only say what I want done," give him a lollipop.
Alan J. Perlis
Software Engineering Great Quotes
This article is part of the CodeSmell Series.
