DEV Community

Discussion on: TypeError: JavaScript

Collapse
 
qm3ster profile image
Mihail Malo • Edited

Please note that new String() is a wrong and dangerous answer as it returns a String object and not a string. Much better is the String() static method, that just calls .toString() on the argument.

{
const obj = {toString:()=>"YOWZA", valueOf: Math.random}
let a
const examples = `String(0)
new String(0)
typeof String(0)
typeof new String(0)
!!String("")
!!new String("")
String(0)==="0"
new String(0)==="0"
String(obj)
new String(obj)
Number("0")
new Number("0")
typeof Number("0")
typeof new Number("0")
!!Number("0")
!!new Number("0")
Number("0") === 0
new Number("0") === 0
Number(obj)
new Number(obj)
Boolean(false)
new Boolean(false)
typeof Boolean(false)
typeof new Boolean(false)
!!Boolean(false)
!!new Boolean(false)
(a = Number(), a.b=a, a.b)
(a = new Number(), a.b=a, a.b)`
.split('\n')
const maxLen = Math.max(...examples.map(x => x.length))
examples.forEach(line => console.log(line.padEnd(maxLen)," => ",eval(line)))
}

Above are just a few examples of how this will get you.

Or, non-executably:

const obj = {toString:()=>"YOWZA", valueOf: Math.random}

String(0)                 // "0"
new String(0)             // String{"0"}

typeof String(0)          // string
typeof new String(0)      // object

!!String("")              // false
!!new String("")          // true

String(0)==="0"           // true
new String(0)==="0"       // false

String(obj)               // "YOWZA"
new String(obj)           // String{"YOWZA"}

Number("0")               // 0
new Number("0")           // Number{0}

typeof Number("0")        // number
typeof new Number("0")    // object

!!Number("0")             // false
!!new Number("0")         // true

Number("0") === 0         // true
new Number("0") === 0     // false

Number(obj)               // 0.42685934002722714
new Number(obj)           // Number{0.644528120927234}

Boolean(false)            // false
new Boolean(false)        // Boolean{false}

typeof Boolean(false)     // boolean
typeof new Boolean(false) // object

!!Boolean(false)          // false
!!new Boolean(false)      // true

const a1 = Number()
a1.b = a1
a1.b                      // undefined
const a2 = Number()
a2.b = a2
a2.b                      // Number {0, b: Number {0, b: Number{...}}}