<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.extremist.software/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=65.248.129.125</id>
	<title>Noisebridge - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.extremist.software/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=65.248.129.125"/>
	<link rel="alternate" type="text/html" href="https://wiki.extremist.software/wiki/Special:Contributions/65.248.129.125"/>
	<updated>2026-04-08T04:07:05Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.13</generator>
	<entry>
		<id>https://wiki.extremist.software/index.php?title=JavaScript/Notes/TypeConversion&amp;diff=43158</id>
		<title>JavaScript/Notes/TypeConversion</title>
		<link rel="alternate" type="text/html" href="https://wiki.extremist.software/index.php?title=JavaScript/Notes/TypeConversion&amp;diff=43158"/>
		<updated>2014-06-25T23:59:39Z</updated>

		<summary type="html">&lt;p&gt;65.248.129.125: /* Converting to Boolean */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Types ==&lt;br /&gt;
* Number &lt;br /&gt;
* String &lt;br /&gt;
* Boolean &lt;br /&gt;
* Null&lt;br /&gt;
* Undefined&lt;br /&gt;
* Object &lt;br /&gt;
There are five primitive types in JavaScript. Everything else is an object.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
Various operations in JavaScript require conversion between primitive and object values.&lt;br /&gt;
&lt;br /&gt;
=== Converting to Boolean ===&lt;br /&gt;
When evaluating any expression that requires a boolean value, a boolean value must be produced. This occurs with the internal &amp;lt;nowiki&amp;gt;[[ToBoolean]]&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
[http://ecma-international.org/ecma-262/5.1/#sec-9.2 &amp;amp;sect; 9.2)].&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var n = 0;&lt;br /&gt;
if(n) { // [[ToBoolean]](0) = false&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var t = !&amp;quot;&amp;quot;; // true. Empty string is falsy.&lt;br /&gt;
var f = !&amp;quot;f&amp;quot;; // false. Non-empty strings other than &amp;quot;0&amp;quot; are not falsy, here.&lt;br /&gt;
Boolean(&amp;quot;&amp;quot;); // false.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All numbers boolean-convert to true except for &amp;lt;code&amp;gt;+/-0&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;NaN&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Boolean operators use type-conversion for the evaluation of their left-hand operand.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
1 &amp;amp;&amp;amp; 0;            // 0.&lt;br /&gt;
&amp;quot;&amp;quot; || 0;           // 0.&lt;br /&gt;
null || undefined; // undefined.&lt;br /&gt;
undefined || 1;    // 1.&lt;br /&gt;
NaN || 0;          // 0;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All falsy values:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
false&lt;br /&gt;
&amp;quot;&amp;quot;&lt;br /&gt;
null&lt;br /&gt;
undefined&lt;br /&gt;
0&lt;br /&gt;
NaN&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All other primitive values and all native ECMAScript objects are truthy. &lt;br /&gt;
[11.11|http://ecma-international.org/ecma-262/5.1/#sec-11.11] Binary Logical Operators&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
The production LogicalANDExpression : LogicalANDExpression &amp;amp;amp;&amp;amp;amp; BitwiseORExpression is evaluated as follows:&lt;br /&gt;
&lt;br /&gt;
#   Let lref be the result of evaluating LogicalANDExpression.&lt;br /&gt;
#   Let lval be GetValue(lref).&lt;br /&gt;
#   If ToBoolean(lval) is false, return lval.&lt;br /&gt;
#   Let rref be the result of evaluating BitwiseORExpression.&lt;br /&gt;
#   Return GetValue(rref).&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Converting to String ===&lt;br /&gt;
With the &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; operator, when either operand is a string, concatenation is performed.&lt;br /&gt;
&lt;br /&gt;
All native objects have a toString method. Number.prototype.toString(base) is special in that it takes a &amp;lt;code&amp;gt;base&amp;lt;/code&amp;gt; parameter. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
15..toString(16)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
String(15); // Calls ToPrimitive(input argument, hint String).&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Conversion to Primitive === &lt;br /&gt;
Mathematical unary and binary operators, as well as boolean operators require the operands to be converted to primitives.&lt;br /&gt;
&lt;br /&gt;
The Addition operator is used, the operands must be converted into primitive values. First, the interpreter calls the object&#039;s valueOf. If the result is a primitive value, then that value is used. &#039;&#039;&#039;Example:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var ob = { &lt;br /&gt;
  valueOf : function() { return 1; } &lt;br /&gt;
};&lt;br /&gt;
ob + 1; // 2.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otherwise, if &amp;lt;code&amp;gt;&#039;&#039;o&#039;&#039;.valueOf&amp;lt;/code&amp;gt; results in an object &amp;amp;mdash;and &amp;lt;code&amp;gt;Object.prototype.valueOf&amp;lt;/code&amp;gt; does &amp;amp;mdash; the object&#039;s &amp;lt;code&amp;gt;toString&amp;lt;/code&amp;gt; is called. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var ob = { toString : function() { return &amp;quot;1&amp;quot;; } };&lt;br /&gt;
ob + 1; // &amp;quot;11&amp;quot;.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example:&#039;&#039;&#039; [http://jsbin.com/eTAQaNoX/2/edit toString, valueOf, and concatenation]&lt;br /&gt;
&lt;br /&gt;
=== Converting to Number ===&lt;br /&gt;
Converting strings is a very common requirement and many approaches can be used. Any mathematical operator except the concatenation/addition operator will force type-conversion to number.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var d1 = new Date(NaN);&lt;br /&gt;
var d2 = new Date(NaN);&lt;br /&gt;
&lt;br /&gt;
d1.setFullYear(2000);&lt;br /&gt;
d2.setFullYear(2000);&lt;br /&gt;
&lt;br /&gt;
d1 &amp;gt;= d2; // true, conversion to number.&lt;br /&gt;
d1 &amp;lt;= d2; // true, conversion to number.&lt;br /&gt;
d1 == d2 // false, different objects.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== parseInt(s, radix) ==&lt;br /&gt;
&lt;br /&gt;
To force use of a particular base, use the radix parameter: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;parseInt(&amp;quot;09&amp;quot;, base) // base from 2 to 36.&amp;lt;/source&amp;gt; &lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;radix&amp;lt;/code&amp;gt; is omitted, the base is determined by the contents of the string. Any string beginning with &amp;lt;code&amp;gt;0x&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;0X&amp;lt;/code&amp;gt; represents a hexadecimal number. A string beginning with a leading 0 may, in older implementations, be parsed as octal (as if raxix were 8), in ECMA-262 Ed 3 (octal digits are 0-7). If string &amp;lt;code&amp;gt;09&amp;lt;/code&amp;gt; is converted to &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var t = &amp;quot;0xf&amp;quot;;&lt;br /&gt;
Number(t); // 15&lt;br /&gt;
+t;        // 15&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Primitive to Object with Property Accessors &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[]&amp;lt;/code&amp;gt; === &lt;br /&gt;
Property access operation on string, number, and boolean primitives results in the creation of a &#039;&#039;&#039;temporary&#039;&#039; object, for the algorithm.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Primitive to Object conversion.&lt;br /&gt;
true.toString(); // creates a temporary Boolean Object.&lt;br /&gt;
1.2.valueOf();   // creates a temporary Number object.&lt;br /&gt;
&amp;quot; foo &amp;quot;.trim();  // creates a temporary String Object.&lt;br /&gt;
&lt;br /&gt;
// null.toString(); // TypeError&lt;br /&gt;
// undefined.toString(); // TypeError&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also: http://dhtmlkitchen.com/how-property-access-works/&lt;br /&gt;
&lt;br /&gt;
=== Object Creation ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// You&#039;ll never need these.&lt;br /&gt;
new Object(1);    // Results a Number object.&lt;br /&gt;
new Object(true); // Results a Boolean object.&lt;br /&gt;
new Object(&amp;quot;&amp;quot;);   // Results a String object.&lt;br /&gt;
JSON.parse(&amp;quot;{}&amp;quot;); // Results an Object object.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Type Checking ==&lt;br /&gt;
Use sparingly. Avoid overloading with typechecking.&lt;br /&gt;
=== The typeof Operator ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
typeof someval;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type 	&amp;lt;th&amp;gt;Result&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background: #eee&amp;quot;&amp;gt;&amp;lt;td&amp;gt;Undefined 	&amp;lt;td&amp;gt;&amp;quot;undefined&amp;quot;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Null 	&amp;lt;td&amp;gt;&amp;quot;object&amp;quot;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background: #eee&amp;quot;&amp;gt;&amp;lt;td&amp;gt;Boolean 	&amp;lt;td&amp;gt;&amp;quot;boolean&amp;quot;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Number 	&amp;lt;td&amp;gt;&amp;quot;number&amp;quot;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background: #eee&amp;quot;&amp;gt;&amp;lt;td&amp;gt;String 	&amp;lt;td&amp;gt;&amp;quot;string&amp;quot;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Object (native or host and doesn&#039;t implement &amp;lt;nowiki&amp;gt;[[Call]]&amp;lt;/nowiki&amp;gt;) 	&amp;lt;td&amp;gt;&amp;quot;object&amp;quot;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background: #eee&amp;quot;&amp;gt;&amp;lt;td&amp;gt;Object (native or host and implements &amp;lt;nowiki&amp;gt;[[Call]]&amp;lt;/nowiki&amp;gt;) 	&amp;lt;td&amp;gt;&amp;quot;function&amp;quot;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>65.248.129.125</name></author>
	</entry>
	<entry>
		<id>https://wiki.extremist.software/index.php?title=JavaScript/Notes/TypeConversion&amp;diff=43157</id>
		<title>JavaScript/Notes/TypeConversion</title>
		<link rel="alternate" type="text/html" href="https://wiki.extremist.software/index.php?title=JavaScript/Notes/TypeConversion&amp;diff=43157"/>
		<updated>2014-06-25T23:58:40Z</updated>

		<summary type="html">&lt;p&gt;65.248.129.125: /* Converting to Boolean */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Types ==&lt;br /&gt;
* Number &lt;br /&gt;
* String &lt;br /&gt;
* Boolean &lt;br /&gt;
* Null&lt;br /&gt;
* Undefined&lt;br /&gt;
* Object &lt;br /&gt;
There are five primitive types in JavaScript. Everything else is an object.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
Various operations in JavaScript require conversion between primitive and object values.&lt;br /&gt;
&lt;br /&gt;
=== Converting to Boolean ===&lt;br /&gt;
When evaluating any expression that requires a boolean value, a boolean value must be produced. This occurs with the internal &amp;lt;nowiki&amp;gt;[[ToBoolean]]&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
[http://ecma-international.org/ecma-262/5.1/#sec-9.2 &amp;amp;sect; 9.2)].&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var n = 0;&lt;br /&gt;
if(n) { // [[ToBoolean]](0) = false&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var t = !&amp;quot;&amp;quot;; // true. Empty string is falsy.&lt;br /&gt;
var f = !&amp;quot;f&amp;quot;; // false. Non-empty strings other than &amp;quot;0&amp;quot; are not falsy, here.&lt;br /&gt;
Boolean(&amp;quot;&amp;quot;); // false.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All numbers boolean-convert to true except for &amp;lt;code&amp;gt;+/-0&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;NaN&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Boolean operators use type-conversion for the evaluation of their left-hand operand.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
1 &amp;amp;&amp;amp; 0;            // 0.&lt;br /&gt;
&amp;quot;&amp;quot; || 0;           // 0.&lt;br /&gt;
null || undefined; // undefined.&lt;br /&gt;
undefined || 1;    // 1.&lt;br /&gt;
NaN || 0;          // 0;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All falsy values:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
false&lt;br /&gt;
&amp;quot;&amp;quot;&lt;br /&gt;
null&lt;br /&gt;
undefined&lt;br /&gt;
0&lt;br /&gt;
NaN&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All other primitive values and all native ECMAScript objects are truthy. &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
The production LogicalANDExpression : LogicalANDExpression &amp;amp;amp;&amp;amp;amp; BitwiseORExpression is evaluated as follows:&lt;br /&gt;
&lt;br /&gt;
#   Let lref be the result of evaluating LogicalANDExpression.&lt;br /&gt;
#   Let lval be GetValue(lref).&lt;br /&gt;
#   If ToBoolean(lval) is false, return lval.&lt;br /&gt;
#   Let rref be the result of evaluating BitwiseORExpression.&lt;br /&gt;
#   Return GetValue(rref).&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Converting to String ===&lt;br /&gt;
With the &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; operator, when either operand is a string, concatenation is performed.&lt;br /&gt;
&lt;br /&gt;
All native objects have a toString method. Number.prototype.toString(base) is special in that it takes a &amp;lt;code&amp;gt;base&amp;lt;/code&amp;gt; parameter. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
15..toString(16)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
String(15); // Calls ToPrimitive(input argument, hint String).&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Conversion to Primitive === &lt;br /&gt;
Mathematical unary and binary operators, as well as boolean operators require the operands to be converted to primitives.&lt;br /&gt;
&lt;br /&gt;
The Addition operator is used, the operands must be converted into primitive values. First, the interpreter calls the object&#039;s valueOf. If the result is a primitive value, then that value is used. &#039;&#039;&#039;Example:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var ob = { &lt;br /&gt;
  valueOf : function() { return 1; } &lt;br /&gt;
};&lt;br /&gt;
ob + 1; // 2.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otherwise, if &amp;lt;code&amp;gt;&#039;&#039;o&#039;&#039;.valueOf&amp;lt;/code&amp;gt; results in an object &amp;amp;mdash;and &amp;lt;code&amp;gt;Object.prototype.valueOf&amp;lt;/code&amp;gt; does &amp;amp;mdash; the object&#039;s &amp;lt;code&amp;gt;toString&amp;lt;/code&amp;gt; is called. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var ob = { toString : function() { return &amp;quot;1&amp;quot;; } };&lt;br /&gt;
ob + 1; // &amp;quot;11&amp;quot;.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example:&#039;&#039;&#039; [http://jsbin.com/eTAQaNoX/2/edit toString, valueOf, and concatenation]&lt;br /&gt;
&lt;br /&gt;
=== Converting to Number ===&lt;br /&gt;
Converting strings is a very common requirement and many approaches can be used. Any mathematical operator except the concatenation/addition operator will force type-conversion to number.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var d1 = new Date(NaN);&lt;br /&gt;
var d2 = new Date(NaN);&lt;br /&gt;
&lt;br /&gt;
d1.setFullYear(2000);&lt;br /&gt;
d2.setFullYear(2000);&lt;br /&gt;
&lt;br /&gt;
d1 &amp;gt;= d2; // true, conversion to number.&lt;br /&gt;
d1 &amp;lt;= d2; // true, conversion to number.&lt;br /&gt;
d1 == d2 // false, different objects.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== parseInt(s, radix) ==&lt;br /&gt;
&lt;br /&gt;
To force use of a particular base, use the radix parameter: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;parseInt(&amp;quot;09&amp;quot;, base) // base from 2 to 36.&amp;lt;/source&amp;gt; &lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;radix&amp;lt;/code&amp;gt; is omitted, the base is determined by the contents of the string. Any string beginning with &amp;lt;code&amp;gt;0x&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;0X&amp;lt;/code&amp;gt; represents a hexadecimal number. A string beginning with a leading 0 may, in older implementations, be parsed as octal (as if raxix were 8), in ECMA-262 Ed 3 (octal digits are 0-7). If string &amp;lt;code&amp;gt;09&amp;lt;/code&amp;gt; is converted to &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var t = &amp;quot;0xf&amp;quot;;&lt;br /&gt;
Number(t); // 15&lt;br /&gt;
+t;        // 15&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Primitive to Object with Property Accessors &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[]&amp;lt;/code&amp;gt; === &lt;br /&gt;
Property access operation on string, number, and boolean primitives results in the creation of a &#039;&#039;&#039;temporary&#039;&#039; object, for the algorithm.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Primitive to Object conversion.&lt;br /&gt;
true.toString(); // creates a temporary Boolean Object.&lt;br /&gt;
1.2.valueOf();   // creates a temporary Number object.&lt;br /&gt;
&amp;quot; foo &amp;quot;.trim();  // creates a temporary String Object.&lt;br /&gt;
&lt;br /&gt;
// null.toString(); // TypeError&lt;br /&gt;
// undefined.toString(); // TypeError&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also: http://dhtmlkitchen.com/how-property-access-works/&lt;br /&gt;
&lt;br /&gt;
=== Object Creation ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// You&#039;ll never need these.&lt;br /&gt;
new Object(1);    // Results a Number object.&lt;br /&gt;
new Object(true); // Results a Boolean object.&lt;br /&gt;
new Object(&amp;quot;&amp;quot;);   // Results a String object.&lt;br /&gt;
JSON.parse(&amp;quot;{}&amp;quot;); // Results an Object object.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Type Checking ==&lt;br /&gt;
Use sparingly. Avoid overloading with typechecking.&lt;br /&gt;
=== The typeof Operator ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
typeof someval;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type 	&amp;lt;th&amp;gt;Result&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background: #eee&amp;quot;&amp;gt;&amp;lt;td&amp;gt;Undefined 	&amp;lt;td&amp;gt;&amp;quot;undefined&amp;quot;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Null 	&amp;lt;td&amp;gt;&amp;quot;object&amp;quot;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background: #eee&amp;quot;&amp;gt;&amp;lt;td&amp;gt;Boolean 	&amp;lt;td&amp;gt;&amp;quot;boolean&amp;quot;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Number 	&amp;lt;td&amp;gt;&amp;quot;number&amp;quot;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background: #eee&amp;quot;&amp;gt;&amp;lt;td&amp;gt;String 	&amp;lt;td&amp;gt;&amp;quot;string&amp;quot;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Object (native or host and doesn&#039;t implement &amp;lt;nowiki&amp;gt;[[Call]]&amp;lt;/nowiki&amp;gt;) 	&amp;lt;td&amp;gt;&amp;quot;object&amp;quot;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background: #eee&amp;quot;&amp;gt;&amp;lt;td&amp;gt;Object (native or host and implements &amp;lt;nowiki&amp;gt;[[Call]]&amp;lt;/nowiki&amp;gt;) 	&amp;lt;td&amp;gt;&amp;quot;function&amp;quot;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>65.248.129.125</name></author>
	</entry>
	<entry>
		<id>https://wiki.extremist.software/index.php?title=JavaScript/Notes/TypeConversion&amp;diff=43156</id>
		<title>JavaScript/Notes/TypeConversion</title>
		<link rel="alternate" type="text/html" href="https://wiki.extremist.software/index.php?title=JavaScript/Notes/TypeConversion&amp;diff=43156"/>
		<updated>2014-06-25T23:58:03Z</updated>

		<summary type="html">&lt;p&gt;65.248.129.125: /* Converting to Boolean */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Types ==&lt;br /&gt;
* Number &lt;br /&gt;
* String &lt;br /&gt;
* Boolean &lt;br /&gt;
* Null&lt;br /&gt;
* Undefined&lt;br /&gt;
* Object &lt;br /&gt;
There are five primitive types in JavaScript. Everything else is an object.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
Various operations in JavaScript require conversion between primitive and object values.&lt;br /&gt;
&lt;br /&gt;
=== Converting to Boolean ===&lt;br /&gt;
When evaluating any expression that requires a boolean value, a boolean value must be produced. This occurs with the internal &amp;lt;nowiki&amp;gt;[[ToBoolean]]&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
[http://ecma-international.org/ecma-262/5.1/#sec-9.2 &amp;amp;sect; 9.2)].&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var n = 0;&lt;br /&gt;
if(n) { // [[ToBoolean]](0) = false&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var t = !&amp;quot;&amp;quot;; // true. Empty string is falsy.&lt;br /&gt;
var f = !&amp;quot;f&amp;quot;; // false. Non-empty strings other than &amp;quot;0&amp;quot; are not falsy, here.&lt;br /&gt;
Boolean(&amp;quot;&amp;quot;); // false.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All numbers boolean-convert to true except for &amp;lt;code&amp;gt;+/-0&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;NaN&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Boolean operators use type-conversion for the evaluation of their left-hand operand.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
1 &amp;amp;&amp;amp; 0;            // 0.&lt;br /&gt;
&amp;quot;&amp;quot; || 0;           // 0.&lt;br /&gt;
null || undefined; // undefined.&lt;br /&gt;
undefined || 1;    // 1.&lt;br /&gt;
NaN || 0;          // 0;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All falsy values:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
false&lt;br /&gt;
&amp;quot;&amp;quot;&lt;br /&gt;
null&lt;br /&gt;
undefined&lt;br /&gt;
0&lt;br /&gt;
NaN&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All other primitive values and all native ECMAScript objects are truthy. &lt;br /&gt;
&lt;br /&gt;
The production LogicalANDExpression : LogicalANDExpression &amp;amp;&amp;amp; BitwiseORExpression is evaluated as follows:&lt;br /&gt;
&lt;br /&gt;
#   Let lref be the result of evaluating LogicalANDExpression.&lt;br /&gt;
#   Let lval be GetValue(lref).&lt;br /&gt;
#   If ToBoolean(lval) is false, return lval.&lt;br /&gt;
#   Let rref be the result of evaluating BitwiseORExpression.&lt;br /&gt;
#   Return GetValue(rref).&lt;br /&gt;
&lt;br /&gt;
=== Converting to String ===&lt;br /&gt;
With the &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; operator, when either operand is a string, concatenation is performed.&lt;br /&gt;
&lt;br /&gt;
All native objects have a toString method. Number.prototype.toString(base) is special in that it takes a &amp;lt;code&amp;gt;base&amp;lt;/code&amp;gt; parameter. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
15..toString(16)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
String(15); // Calls ToPrimitive(input argument, hint String).&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Conversion to Primitive === &lt;br /&gt;
Mathematical unary and binary operators, as well as boolean operators require the operands to be converted to primitives.&lt;br /&gt;
&lt;br /&gt;
The Addition operator is used, the operands must be converted into primitive values. First, the interpreter calls the object&#039;s valueOf. If the result is a primitive value, then that value is used. &#039;&#039;&#039;Example:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var ob = { &lt;br /&gt;
  valueOf : function() { return 1; } &lt;br /&gt;
};&lt;br /&gt;
ob + 1; // 2.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otherwise, if &amp;lt;code&amp;gt;&#039;&#039;o&#039;&#039;.valueOf&amp;lt;/code&amp;gt; results in an object &amp;amp;mdash;and &amp;lt;code&amp;gt;Object.prototype.valueOf&amp;lt;/code&amp;gt; does &amp;amp;mdash; the object&#039;s &amp;lt;code&amp;gt;toString&amp;lt;/code&amp;gt; is called. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var ob = { toString : function() { return &amp;quot;1&amp;quot;; } };&lt;br /&gt;
ob + 1; // &amp;quot;11&amp;quot;.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example:&#039;&#039;&#039; [http://jsbin.com/eTAQaNoX/2/edit toString, valueOf, and concatenation]&lt;br /&gt;
&lt;br /&gt;
=== Converting to Number ===&lt;br /&gt;
Converting strings is a very common requirement and many approaches can be used. Any mathematical operator except the concatenation/addition operator will force type-conversion to number.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var d1 = new Date(NaN);&lt;br /&gt;
var d2 = new Date(NaN);&lt;br /&gt;
&lt;br /&gt;
d1.setFullYear(2000);&lt;br /&gt;
d2.setFullYear(2000);&lt;br /&gt;
&lt;br /&gt;
d1 &amp;gt;= d2; // true, conversion to number.&lt;br /&gt;
d1 &amp;lt;= d2; // true, conversion to number.&lt;br /&gt;
d1 == d2 // false, different objects.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== parseInt(s, radix) ==&lt;br /&gt;
&lt;br /&gt;
To force use of a particular base, use the radix parameter: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;parseInt(&amp;quot;09&amp;quot;, base) // base from 2 to 36.&amp;lt;/source&amp;gt; &lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;radix&amp;lt;/code&amp;gt; is omitted, the base is determined by the contents of the string. Any string beginning with &amp;lt;code&amp;gt;0x&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;0X&amp;lt;/code&amp;gt; represents a hexadecimal number. A string beginning with a leading 0 may, in older implementations, be parsed as octal (as if raxix were 8), in ECMA-262 Ed 3 (octal digits are 0-7). If string &amp;lt;code&amp;gt;09&amp;lt;/code&amp;gt; is converted to &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var t = &amp;quot;0xf&amp;quot;;&lt;br /&gt;
Number(t); // 15&lt;br /&gt;
+t;        // 15&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Primitive to Object with Property Accessors &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[]&amp;lt;/code&amp;gt; === &lt;br /&gt;
Property access operation on string, number, and boolean primitives results in the creation of a &#039;&#039;&#039;temporary&#039;&#039; object, for the algorithm.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Primitive to Object conversion.&lt;br /&gt;
true.toString(); // creates a temporary Boolean Object.&lt;br /&gt;
1.2.valueOf();   // creates a temporary Number object.&lt;br /&gt;
&amp;quot; foo &amp;quot;.trim();  // creates a temporary String Object.&lt;br /&gt;
&lt;br /&gt;
// null.toString(); // TypeError&lt;br /&gt;
// undefined.toString(); // TypeError&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also: http://dhtmlkitchen.com/how-property-access-works/&lt;br /&gt;
&lt;br /&gt;
=== Object Creation ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// You&#039;ll never need these.&lt;br /&gt;
new Object(1);    // Results a Number object.&lt;br /&gt;
new Object(true); // Results a Boolean object.&lt;br /&gt;
new Object(&amp;quot;&amp;quot;);   // Results a String object.&lt;br /&gt;
JSON.parse(&amp;quot;{}&amp;quot;); // Results an Object object.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Type Checking ==&lt;br /&gt;
Use sparingly. Avoid overloading with typechecking.&lt;br /&gt;
=== The typeof Operator ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
typeof someval;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type 	&amp;lt;th&amp;gt;Result&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background: #eee&amp;quot;&amp;gt;&amp;lt;td&amp;gt;Undefined 	&amp;lt;td&amp;gt;&amp;quot;undefined&amp;quot;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Null 	&amp;lt;td&amp;gt;&amp;quot;object&amp;quot;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background: #eee&amp;quot;&amp;gt;&amp;lt;td&amp;gt;Boolean 	&amp;lt;td&amp;gt;&amp;quot;boolean&amp;quot;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Number 	&amp;lt;td&amp;gt;&amp;quot;number&amp;quot;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background: #eee&amp;quot;&amp;gt;&amp;lt;td&amp;gt;String 	&amp;lt;td&amp;gt;&amp;quot;string&amp;quot;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Object (native or host and doesn&#039;t implement &amp;lt;nowiki&amp;gt;[[Call]]&amp;lt;/nowiki&amp;gt;) 	&amp;lt;td&amp;gt;&amp;quot;object&amp;quot;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background: #eee&amp;quot;&amp;gt;&amp;lt;td&amp;gt;Object (native or host and implements &amp;lt;nowiki&amp;gt;[[Call]]&amp;lt;/nowiki&amp;gt;) 	&amp;lt;td&amp;gt;&amp;quot;function&amp;quot;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>65.248.129.125</name></author>
	</entry>
</feed>