JavaScript/Notes/TypeConversion

From Noisebridge
< JavaScript
Revision as of 01:32, 6 January 2014 by 98.210.197.51 (Talk)

Jump to: navigation, search

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

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

Contents

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:

var n = 0;
if(n) { // false
}
 
var t = !""; // Empty string is falsy.
var f = !"f"; // Non-empty strings are not falsy.

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.

1 && 0;            // 1.
"" || 0;           // 0.
null || undefined; // undefined.
undefined || 1;    // 1.
NaN || 0;          // 0;

All falsy values:

false
""
null
undefined
0
NaN

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:

var o = { 
  valueOf : function() { return 1; } 
};
o + 1; // 2.

Otherwise, if o.valueOf results in an object —and Object.prototype.valueOf does — the object's toString is called.

var o = { toString : function() { return "1"; } };
o + 1; // "11".

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.

true.toString(); // Boolean Object.
1.2.valueOf(); // Number object.
" foo ".trim(); // String Object.
 
// null.toString(); // TypeError
// undefined.toString(); // TypeError


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/

Personal tools