JavaScript/Notes/TypeConversion

From Noisebridge
Jump to navigation Jump to search

There are five primitive types in JavaScript: Null, Undefined, Boolean, String, Number.

Various operations in JavaScript require conversion to and from primitive values.

Converting to Boolean

When evaluating any expression that requires a boolean value, the expression must be converted into a boolean using the internal [[ToBoolean]].

For example: <source lang="javascript"> var n = 0; if(n) { // false }

var t = !""; // Empty string is falsy. var f = !"f"; // Non-empty strings are not falsy. </source>

All numbers boolean-convert to true except for the following: +/-0 and NaN

Boolean operators use type-conversion for the evaluation of their left hand side operands. <source lang="javascript"> 1 && 0; // 1. "" || 0; // 0. null || undefined; // undefined. undefined || 1; // 1. NaN || 0; // 0; </source>

All falsy values: <source lang="javascript"> false "" null undefined 0 NaN </source>

All other primitive values and all objects are truthy.

Converting to String

When either operand is a string, concatenation is performed.

Object to Primitive

Whenever the + operator is used, the operands must be converted into primitive values. First, the interpreter calls the object's valueOf to get a primitive value. If the result is a primitive value, then that value is used. Example:

<source lang="javascript"> var o = {

 valueOf : function() { return 1; } 

}; o + 1; // 2. </source>

Otherwise, if o.valueOf results in an object —and Object.prototype.valueOf does — the object's toString is called. <source lang="javascript"> var o = { toString : function() { return "1"; } }; o + 1; // "11". </source>

Converting to Number

Converting strings is a very common requirement and many methods can be used. Any mathematical operator except the concatenation/addition operator will force type-conversion to number.

Primitive to Object

Property access operation on string, number, and boolean primitives results in the creation of a temporary object. <source lang="javascript"> true.toString(); // Boolean Object. 1.2.valueOf(); // Number object. " foo ".trim(); // String Object.

// null.toString(); // TypeError // undefined.toString(); // TypeError </source>


Type Checking

Type Result
Undefined "undefined"
Null "object"
Boolean "boolean"
Number "number"
String "string"
Object (native and doesn't implement Call) "object"
Object (native or host and implements Call) "function"
Object (host) Implementation-dependent

See also: http://dhtmlkitchen.com/how-property-access-works/