JavaScript/Notes/TypeConversion: Difference between revisions

From Noisebridge
Jump to navigation Jump to search
Line 12: Line 12:
}
}


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



Revision as of 08:42, 6 January 2014

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 = !""; // true. Empty string is falsy. var f = !"f"; // false. 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; // 0. "" || 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/