JavaScript/Notes/TypeConversion

From Noisebridge
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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"> // Primitive to Object conversion. true.toString(); // Boolean Object. 1.2.valueOf(); // Number object. " foo ".trim(); // String Object.

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

Type Checking

The typeof Operator

<source lang="javascript"> typeof someval; </source>

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/