What the JavaScript?!

3 Cool things you probably don't need to know about JavaScript

1. All functions have a length property

A Function object's length property indicates how many arguments the function expects, i.e. the number of formal parameters. This number excludes the rest parameter and only includes parameters before the first one with a default value...

Source: Function: length - JavaScript | MDN

function doSomething(a, b, c) {
  return null

doSomething.length // 3

2. Non-arrow functions have access to arguments which is an object of all the arguments passed to the function

arguments is an array-like object accessible inside functions that contains the values of the arguments passed to that function

Source: The arguments object - JavaScript | MDN

function doSomething(a, b, c) {
doSomething("alpha", "beta", "gamma")
// { '0': 'alpha', '1': 'beta', '2': 'gamma' }

A more modern solution is to access the arguments via a spread operator or "rest parameters".

function doSomething(...args) {
doSomething("alpha", "beta", "gamma")
// [ 'alpha', 'beta', 'gamma' ]

Reference: Rest parameters - JavaScript | MDN

3. Built-in objects can be extended!

You can add your own methods to built-in objects like Array and String. When called, you can access the passed in object via this.

Caution: This is not always recommended in production code. It can be confusing to other developers and can cause issues if the built-in object is extended in a different way by another library.

Array.prototype.square = function () {
  // `this` is a reference to the array
  return this.map((x) => x * x)

String.prototype.first = function () {
  // `this` is a reference to the string
  return this[0]
;[1, 2, 3].square() // [1, 4, 9]
"hello".first() // "h"

Although these might not be used often, it's helpful to know more about JavaScript and how it works under the hood. It's also fun to learn about the language you use every day!