<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>JScript Blog : IE</title><link>http://blogs.msdn.com/jscript/archive/tags/IE/default.aspx</link><description>Tags: IE</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Versioning Language Features in JScript</title><link>http://blogs.msdn.com/jscript/archive/2009/04/17/versioning-language-features-in-jscript.aspx</link><pubDate>Fri, 17 Apr 2009 01:58:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9553580</guid><dc:creator>GauravS</dc:creator><slash:comments>21</slash:comments><comments>http://blogs.msdn.com/jscript/comments/9553580.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jscript/commentrss.aspx?PostID=9553580</wfw:commentRss><wfw:comment>http://blogs.msdn.com/jscript/rsscomments.aspx?PostID=9553580</wfw:comment><description>&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;With &lt;A href="http://blogs.msdn.com/ie/archive/2009/03/19/internet-explorer-8-final-available-now.aspx"&gt;&lt;FONT color=#0000ff&gt;Internet Explorer 8&lt;/FONT&gt;&lt;/A&gt; we introduced several new JScript language features including &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt"&gt;&lt;A href="http://blogs.msdn.com/ie/archive/2008/09/10/native-json-in-ie8.aspx"&gt;&lt;SPAN style="mso-bidi-font-family: 'Segoe UI'"&gt;native JSON support&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt; and &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt"&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/dd229916(VS.85).aspx"&gt;&lt;SPAN style="mso-bidi-font-family: 'Segoe UI'"&gt;accessor methods&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt; for Mutable DOM prototypes. Of course, any new language feature introduces compatibility risk and one of the main pieces of feedback we received was that we needed to provide a smart way for developers to opt in or out of these new language features.&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; COLOR: black; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;So in the&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt; JScript engine shipped as a part of Internet Explorer 8, we introduced a versioning switch which enables developers to choose the JScript language set they want to support. Web developers can opt-in/opt-out of &lt;SPAN style="COLOR: black"&gt;select JScript language&lt;/SPAN&gt; features by using IE8’s &lt;SPAN style="COLOR: #1f497d"&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/cc288325(VS.85).aspx"&gt;Document Compatibility&lt;/A&gt;&lt;/SPAN&gt;, which depends upon the layout (or document) mode in which web content is loaded.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; COLOR: #1f497d; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;B&gt;&lt;U&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;Potential Issue: Example&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/U&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;As an example, let’s look at IE8’s &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt"&gt;&lt;A href="http://blogs.msdn.com/ie/archive/2008/09/10/native-json-in-ie8.aspx"&gt;&lt;SPAN style="mso-bidi-font-family: 'Segoe UI'"&gt;native JSON support&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;. We added this support to the engine by adding a global JSON object with built-in &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;parse()&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt; and &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;stringify()&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt; methods, as per the &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt"&gt;&lt;A href="http://wiki.ecmascript.org/doku.php?id=es3.1:es3.1_proposal_working_draft"&gt;&lt;SPAN style="mso-bidi-font-family: 'Segoe UI'"&gt;draft ES3.1 specification&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; COLOR: black; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;,&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; COLOR: #1f497d; FONT-SIZE: 10pt"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; COLOR: black; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;now called the &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; COLOR: #1f497d; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'; mso-themecolor: dark2"&gt;&lt;A href="http://blogs.msdn.com/jscript/archive/2009/04/09/a-major-milestone-in-javascript-standardization.aspx"&gt;ECMAScript Fifth Edition&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;. Now, for the sake of example, let us pretend that the JScript engine did not allow language versioning and a site implemented a JSON call like this: &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Segoe UI','sans-serif'; COLOR: #1f497d; mso-themecolor: dark2"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;DIV style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 1pt; PADDING-LEFT: 0in; PADDING-RIGHT: 4pt; BACKGROUND: white; BORDER-TOP: windowtext 1pt solid; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 1pt; mso-element: para-border-div; mso-border-alt: solid windowtext .5pt"&gt;
&lt;P style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; LINE-HEIGHT: 12pt; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: white; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt; mso-padding-alt: 1.0pt 4.0pt 1.0pt 0in" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #606060; FONT-SIZE: 8pt; mso-bidi-font-family: 'Courier New'; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'" lang=EN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;1:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: black; FONT-SIZE: 8pt; mso-bidi-font-family: 'Courier New'; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'" lang=EN&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: blue; FONT-SIZE: 8pt"&gt;if&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt"&gt;(!&lt;SPAN style="COLOR: blue"&gt;this&lt;/SPAN&gt;.JSON) &lt;SPAN style="COLOR: green"&gt;// check for non-existence of JSON object/functions &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: black; FONT-SIZE: 8pt; mso-bidi-font-family: 'Courier New'; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'" lang=EN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; LINE-HEIGHT: 12pt; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #f4f4f4; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt; mso-padding-alt: 1.0pt 4.0pt 1.0pt 0in" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #606060; FONT-SIZE: 8pt; mso-bidi-font-family: 'Courier New'; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'" lang=EN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;2:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: black; FONT-SIZE: 8pt; mso-bidi-font-family: 'Courier New'; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'" lang=EN&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: black; FONT-SIZE: 8pt; mso-bidi-font-family: 'Courier New'; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'; mso-themecolor: text1" lang=EN&gt;{&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: black; FONT-SIZE: 8pt; mso-bidi-font-family: 'Courier New'; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'" lang=EN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; LINE-HEIGHT: 12pt; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: white; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt; mso-padding-alt: 1.0pt 4.0pt 1.0pt 0in" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #606060; FONT-SIZE: 8pt; mso-bidi-font-family: 'Courier New'; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'" lang=EN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;3:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: black; FONT-SIZE: 8pt; mso-bidi-font-family: 'Courier New'; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'" lang=EN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: green; FONT-SIZE: 8pt"&gt;//&amp;lt;define a JSON object&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: black; FONT-SIZE: 8pt; mso-bidi-font-family: 'Courier New'; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'" lang=EN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; LINE-HEIGHT: 12pt; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #f4f4f4; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt; mso-padding-alt: 1.0pt 4.0pt 1.0pt 0in" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #606060; FONT-SIZE: 8pt; mso-bidi-font-family: 'Courier New'; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'" lang=EN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;4:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: black; FONT-SIZE: 8pt; mso-bidi-font-family: 'Courier New'; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'" lang=EN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: green; FONT-SIZE: 8pt; mso-bidi-font-size: 10.0pt"&gt;//&amp;lt;define a non-standard compliant encoder function – JSON.encode&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: black; FONT-SIZE: 6pt; mso-bidi-font-size: 8.0pt; mso-bidi-font-family: 'Courier New'; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'" lang=EN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; LINE-HEIGHT: 115%; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: white; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 1.0pt 4.0pt 1.0pt 0in; mso-shading: transparent" class=MsoNormal&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; COLOR: #606060; FONT-SIZE: 8pt; mso-bidi-font-family: 'Courier New'; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'" lang=EN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;5:&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; COLOR: black; FONT-SIZE: 8pt; mso-bidi-font-family: 'Courier New'; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'" lang=EN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; COLOR: green; FONT-SIZE: 8pt"&gt;//&amp;lt;define a non-standard compliant parser function – JSON.parse&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; COLOR: green; FONT-SIZE: 10pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; LINE-HEIGHT: 12pt; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #f4f4f4; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt; mso-padding-alt: 1.0pt 4.0pt 1.0pt 0in" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #606060; FONT-SIZE: 8pt; mso-bidi-font-family: 'Courier New'; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'" lang=EN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;6:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: black; FONT-SIZE: 8pt; mso-bidi-font-family: 'Courier New'; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'" lang=EN&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 10pt"&gt;}&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: black; FONT-SIZE: 8pt; mso-bidi-font-family: 'Courier New'; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'" lang=EN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; LINE-HEIGHT: 12pt; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: white; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt; mso-padding-alt: 1.0pt 4.0pt 1.0pt 0in" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #606060; FONT-SIZE: 8pt; mso-bidi-font-family: 'Courier New'; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'" lang=EN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;7:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: black; FONT-SIZE: 8pt; mso-bidi-font-family: 'Courier New'; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'" lang=EN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; LINE-HEIGHT: 12pt; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: #f4f4f4; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt; mso-padding-alt: 1.0pt 4.0pt 1.0pt 0in" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #606060; FONT-SIZE: 8pt; mso-bidi-font-family: 'Courier New'; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'" lang=EN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;8:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: black; FONT-SIZE: 8pt; mso-bidi-font-family: 'Courier New'; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'" lang=EN&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: green; FONT-SIZE: 8pt"&gt;//somewhere in the code&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: black; FONT-SIZE: 8pt; mso-bidi-font-family: 'Courier New'; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'" lang=EN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; LINE-HEIGHT: 12pt; MARGIN: 0in 0in 0pt; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: white; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; mso-border-alt: solid windowtext .5pt; tab-stops: 45.8pt 91.6pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt; mso-padding-alt: 1.0pt 4.0pt 1.0pt 0in" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #606060; FONT-SIZE: 8pt; mso-bidi-font-family: 'Courier New'; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'" lang=EN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;9:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: black; FONT-SIZE: 8pt; mso-bidi-font-family: 'Courier New'; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'" lang=EN&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: black; FONT-SIZE: 8pt"&gt;JSON.enco&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 8pt"&gt;de(&lt;SPAN style="COLOR: black; mso-themecolor: text1"&gt;myObj&lt;/SPAN&gt;);&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;B&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; COLOR: #1f497d; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'; mso-themecolor: dark2"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;For IE7, since no JSON object existed by default, the &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt"&gt;if&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt; check would evaluate to &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 10pt"&gt;true&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt; and the user defined JSON object and encoder/decoder methods would be defined. The call to &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: black; FONT-SIZE: 10pt"&gt;JSON.encode()&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt; would work as wanted. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;However, for IE8, the existence of the native JSON object would cause the &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 10pt"&gt;if&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt; check to evaluate to &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 10pt"&gt;false&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt; and no user defined method would be available. The call to &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: black; FONT-SIZE: 10pt"&gt;JSON.e&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 10pt"&gt;ncode()&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt; would now fail, which would produce unexpected&amp;nbsp;application behavior, since no such method was defined.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; COLOR: #1f497d; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;B&gt;&lt;U&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;JScript Versioning in Internet Explorer 8 (for Web Developers)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/U&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;Web developers can now avoid such issues by choosing an appropriate layout (or document) mode for their content. Choosing the layout mode as “Internet Explorer 8 Standards Mode” opts in to the JScript language features supported by version 5.8 JScript engine. Choosing the layout mode to be any mode other than the “Internet Explorer 8 Standards” mode, would imply an opt-in to support JScript language feature set equivalent to the one shipped in version 5.7 of the JScript engine (equivalent to the one shipped in IE7). Going back to the example above, the site owner can either update the code to start taking advantage of native JSON support and use the “Internet Explorer 8 Standards” mode, or can choose any other layout mode to use the existing code as is, thus maintaining &amp;nbsp;compatibility with IE7.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;While a dependency on the document mode implies that developers will need to make a switch to both IE and JScript level features and can’t single out/opt-in only to the JScript changes, we did not want to introduce a new version vector specifically for the JScript engine. We wanted to support the same system used by IE8 overall for standards support. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;You could read more about IE8’s Compatibility View feature in Scott Dicken’s blog &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt"&gt;&lt;A href="http://blogs.msdn.com/ie/archive/2009/02/16/just-the-facts-recap-of-compatibility-view.aspx"&gt;&lt;SPAN style="mso-bidi-font-family: 'Segoe UI'"&gt;Just The Facts: Recap of Compatibility View&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt; and the MSDN documentation for &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt"&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/cc288325(VS.85).aspx"&gt;&lt;SPAN style="mso-bidi-font-family: 'Segoe UI'"&gt;Defining Document Compatibility&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; COLOR: #1f497d; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;B&gt;&lt;U&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;JScript Versioning in other JScript Hosts (for JScript Host Developers)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/U&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;Apart from Internet Explorer, there are various other hosts such as Windows Script Host, CScript etc. which host the JScript engine, To avoid similar compatibility issues and enable hosts to choose a particular JScript language feature set, the JScript engine now exposes an &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt"&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/cc512776(VS.85).aspx"&gt;IActiveScriptProperty&lt;/A&gt;::SCRIPTPROP_INVOKEVERSIONING&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt; property. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;To opt in to a set of language features that should be supported by the JScript script engine, the host needs to invoke the &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt"&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/cc512774(VS.85).aspx"&gt;&lt;FONT color=#0000ff&gt;IActiveScriptProperty::SetProperty&lt;/FONT&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt; and set &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt"&gt;SCRIPTPROP_INVOKEVERSIONING&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt; to one of the values below during the engine initialization:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL style="MARGIN-TOP: 0in" type=disc&gt;
&lt;LI style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'; mso-fareast-font-family: 'Times New Roman'"&gt;1 (or &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Times New Roman'"&gt;SCRIPTLANGUAGEVERSION_5_7&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'; mso-fareast-font-family: 'Times New Roman'"&gt;):&amp;nbsp; To use the language features equivalent to those shipped in Version 5.7 (or IE7) of the JScript engine&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'; mso-fareast-font-family: 'Times New Roman'"&gt;2 (or &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Times New Roman'"&gt;SCRIPTLANGUAGEVERSION_5_8&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'; mso-fareast-font-family: 'Times New Roman'"&gt;):&amp;nbsp; To use the language features available in Version 5.8 (or IE8) of the JScript script engine. This includes features available in version 5.7 and the language changes introduced in version 5.8.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;By default, the set of language features supported by the JScript script engine is set to 0 (or &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt"&gt;SCRIPTLANGUAGEVERSION_DEFAULT&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;), equivalent to the language feature set shipped in version 5.7 of the JScript engine, unless the host chooses to support a different default behavior. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #1f497d; mso-themecolor: dark2"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;B&gt;&lt;U&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;List of features versioned&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/U&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;Right now, only nine JScript features are versioned like this: &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL style="MARGIN-TOP: 0in" type=disc&gt;
&lt;LI style="MARGIN: 0in 0in 0pt; mso-list: l1 level1 lfo2" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/cc836458(VS.85).aspx"&gt;&lt;SPAN style="mso-bidi-font-family: 'Segoe UI'"&gt;Native JSON support&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'; mso-fareast-font-family: 'Times New Roman'"&gt; – This would introduce a new built-in JSON object, and the following built-in methods – &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Times New Roman'"&gt;JSON.parse(), JSON.stringify(), Date.toJSON(), Number.toJSON(), Boolean.toJSON()&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'; mso-fareast-font-family: 'Times New Roman'"&gt; and &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Times New Roman'"&gt;String.toJSON()&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN: 0in 0in 0pt; mso-list: l1 level1 lfo2" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'; mso-fareast-font-family: 'Times New Roman'"&gt;Support for &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/dd229916(VS.85).aspx"&gt;&lt;SPAN style="mso-bidi-font-family: 'Segoe UI'"&gt;accessor methods&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'; mso-fareast-font-family: 'Times New Roman'"&gt; for enabling Document Object Model prototypes &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN: 0in 0in 0pt; mso-list: l1 level1 lfo2" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'; mso-fareast-font-family: 'Times New Roman'"&gt;Default the separator to “,” if the separator value is ‘&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Times New Roman'"&gt;undefined’&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'; mso-fareast-font-family: 'Times New Roman'"&gt; in &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Times New Roman'"&gt;Array.prototype.join&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN: 0in 0in 0pt; mso-list: l1 level1 lfo2" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'; mso-fareast-font-family: 'Times New Roman'"&gt;Return the length of the resultant array instead of ‘undefined’ for &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Times New Roman'"&gt;Array.prototype.unshift&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN: 0in 0in 0pt; mso-list: l1 level1 lfo2" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'; mso-fareast-font-family: 'Times New Roman'"&gt;Call &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Times New Roman'"&gt;toString()&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'; mso-fareast-font-family: 'Times New Roman'"&gt; if precision is ‘undefined’ instead of throwing a “&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Times New Roman'"&gt;RangeError&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'; mso-fareast-font-family: 'Times New Roman'"&gt;” for &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Times New Roman'"&gt;Number.prototype.toPrecision&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN: 0in 0in 0pt; mso-list: l1 level1 lfo2" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'; mso-fareast-font-family: 'Times New Roman'"&gt;Support for array &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Times New Roman'"&gt;subclassing&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN: 0in 0in 0pt; mso-list: l1 level1 lfo2" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'; mso-fareast-font-family: 'Times New Roman'"&gt;Support for trailing commas in object literals&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN: 0in 0in 0pt; mso-list: l1 level1 lfo2" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'; mso-fareast-font-family: 'Times New Roman'"&gt;Implemented &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Times New Roman'"&gt;Error.prototype.toString&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'; mso-fareast-font-family: 'Times New Roman'"&gt; to provide better error messages &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN: 0in 0in 0pt; mso-list: l1 level1 lfo2" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'; mso-fareast-font-family: 'Times New Roman'"&gt;Support for index operator [] on string values&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;I hope JScript versioning will help ensure that the IE8 end user experience is compatible with IE7 and will give developers some time to update their code to take advantage of these new language enhancements. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;Gaurav Seth&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;Program Manager, JScript &lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9553580" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jscript/archive/tags/JScript+Intellisense/default.aspx">JScript Intellisense</category><category domain="http://blogs.msdn.com/jscript/archive/tags/Javascript/default.aspx">Javascript</category><category domain="http://blogs.msdn.com/jscript/archive/tags/Jscript/default.aspx">Jscript</category><category domain="http://blogs.msdn.com/jscript/archive/tags/IE/default.aspx">IE</category><category domain="http://blogs.msdn.com/jscript/archive/tags/Developers/default.aspx">Developers</category></item><item><title>What’s new in JScript for IE8</title><link>http://blogs.msdn.com/jscript/archive/2009/03/25/what-s-new-in-jscript-for-ie8.aspx</link><pubDate>Wed, 25 Mar 2009 05:56:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9506187</guid><dc:creator>GauravS</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jscript/comments/9506187.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jscript/commentrss.aspx?PostID=9506187</wfw:commentRss><wfw:comment>http://blogs.msdn.com/jscript/rsscomments.aspx?PostID=9506187</wfw:comment><description>&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;During &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt"&gt;&lt;A href="http://blogs.msdn.com/jscript/archive/2008/03/05/jscript-in-internet-explorer-8-beta-1-for-developers.aspx" mce_href="http://blogs.msdn.com/jscript/archive/2008/03/05/jscript-in-internet-explorer-8-beta-1-for-developers.aspx"&gt;&lt;SPAN style="mso-bidi-font-family: 'Segoe UI'"&gt;Beta1&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt; and &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt"&gt;&lt;A href="http://blogs.msdn.com/ie/archive/2008/09/09/what-s-new-for-jscript-for-ie8-beta-2.aspx" mce_href="http://blogs.msdn.com/ie/archive/2008/09/09/what-s-new-for-jscript-for-ie8-beta-2.aspx"&gt;&lt;SPAN style="mso-bidi-font-family: 'Segoe UI'"&gt;Beta2&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt; pre-releases of IE8, we’ve blogged about the performance optimizations done in the Script engine and the addition of new language features such as &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt"&gt;&lt;A href="http://blogs.msdn.com/ie/archive/2008/09/10/native-json-in-ie8.aspx" mce_href="http://blogs.msdn.com/ie/archive/2008/09/10/native-json-in-ie8.aspx"&gt;&lt;SPAN style="mso-bidi-font-family: 'Segoe UI'"&gt;native JSON support&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;. We also provided details about the &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt"&gt;&lt;A href="http://blogs.msdn.com/jscript/archive/2008/09/17/jscript-debugger-in-internet-explorer-8-beta-2.aspx" mce_href="http://blogs.msdn.com/jscript/archive/2008/09/17/jscript-debugger-in-internet-explorer-8-beta-2.aspx"&gt;&lt;SPAN style="mso-bidi-font-family: 'Segoe UI'"&gt;&lt;FONT color=#0000ff&gt;JScript Debugger&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt; and the &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt"&gt;&lt;A href="http://blogs.msdn.com/ie/archive/2008/09/11/introducing-the-ie8-developer-tools-jscript-profiler.aspx" mce_href="http://blogs.msdn.com/ie/archive/2008/09/11/introducing-the-ie8-developer-tools-jscript-profiler.aspx"&gt;&lt;SPAN style="mso-bidi-font-family: 'Segoe UI'"&gt;&lt;FONT color=#0000ff&gt;JScript Profiler&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/A&gt; –&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;that shipped as part &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt"&gt;&lt;A href="http://blogs.msdn.com/ie/archive/2008/09/03/developer-tools-in-internet-explorer-8-beta-2.aspx" mce_href="http://blogs.msdn.com/ie/archive/2008/09/03/developer-tools-in-internet-explorer-8-beta-2.aspx"&gt;&lt;SPAN style="mso-bidi-font-family: 'Segoe UI'"&gt;&lt;FONT color=#0000ff&gt;IE8 Developer Tools&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/A&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;One of the big pieces of feedback during our beta cycles was for compatibility, which, for JScript, meant focusing on how we version some of the language features we’re adding. As a result, version 5.8 of the JScript engine (shipped as a part of IE8) introduced an opt-in versioning mechanism for all the new and breaking language features. The JScript engine now exposes new language features only when the layout (document) mode is set to “IE8 Standards Mode.” Versioned JScript language features available in this release include native JSON support and &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt"&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/dd229916(VS.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd229916(VS.85).aspx"&gt;&lt;SPAN style="mso-bidi-font-family: 'Segoe UI'"&gt;&lt;FONT color=#0000ff&gt;accessor methods&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt; for enabling &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt"&gt;&lt;A href="http://blogs.msdn.com/ie/archive/2009/01/13/responding-to-change-updated-getter-setter-syntax-in-ie8-rc-1.aspx" mce_href="http://blogs.msdn.com/ie/archive/2009/01/13/responding-to-change-updated-getter-setter-syntax-in-ie8-rc-1.aspx"&gt;&lt;SPAN style="mso-bidi-font-family: 'Segoe UI'"&gt;&lt;FONT color=#0000ff&gt;Document Object Model prototypes&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;In addition to addressing bugs that were reported during the betas and our internal testing, we have added some user requested changes in the developer tools.&amp;nbsp; A more seamless debugging experience, profiling multi-frame web pages and searching the profile reports using the search bar are some of the cool features we have added.&amp;nbsp; We think developer tools will make life a whole lot easier for you web developers out there –&amp;nbsp; we would love to hear your feedback!&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;As outlined in the &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt"&gt;&lt;A href="http://www.code-magazine.com/Article.aspx?quickid=0811102" mce_href="http://www.code-magazine.com/Article.aspx?quickid=0811102"&gt;&lt;SPAN style="mso-bidi-font-family: 'Segoe UI'"&gt;article&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt; I wrote in the Code Focus Magazine during beta2, we have made more targeted performance improvements in the JScript engine and the overall AJAX browser stack to improve end-to-end performance of real world applications. On typical AJAX applications such as GMail, commonly used operations have improved over 40% over IE7.&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;I would like to thank all of you for your support and feedback through the IE8 product development cycle and hope that you like the JScript enhancements done in IE8.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;Shreesh Dubey&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Segoe UI'"&gt;Product Unit Manager, JScript&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;I&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-ansi-language: EN" lang=EN&gt;Note: The comments on this blog are blocked. Pl post your comments on the &lt;/SPAN&gt;&lt;/I&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-ansi-language: EN" lang=EN&gt;&lt;A href="http://blogs.msdn.com/ie/archive/2009/03/24/what-s-new-in-jscript-for-ie8.aspx" mce_href="http://blogs.msdn.com/ie/archive/2009/03/24/what-s-new-in-jscript-for-ie8.aspx"&gt;&lt;I&gt;IE team blog&lt;/I&gt;&lt;/A&gt;&lt;I&gt;, so that they can be collated at one place.&lt;o:p&gt;&lt;/o:p&gt;&lt;/I&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9506187" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jscript/archive/tags/Javascript/default.aspx">Javascript</category><category domain="http://blogs.msdn.com/jscript/archive/tags/Jscript/default.aspx">Jscript</category><category domain="http://blogs.msdn.com/jscript/archive/tags/IE/default.aspx">IE</category><category domain="http://blogs.msdn.com/jscript/archive/tags/AJAX/default.aspx">AJAX</category></item><item><title>Internet Explorer 8 Final Available Now</title><link>http://blogs.msdn.com/jscript/archive/2009/03/19/internet-explorer-8-final-available-now.aspx</link><pubDate>Thu, 19 Mar 2009 19:39:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9490465</guid><dc:creator>GauravS</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jscript/comments/9490465.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jscript/commentrss.aspx?PostID=9490465</wfw:commentRss><wfw:comment>http://blogs.msdn.com/jscript/rsscomments.aspx?PostID=9490465</wfw:comment><description>&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-ansi-language: EN; mso-bidi-font-size: 11.0pt" lang=EN&gt;Internet Explorer 8 Final is now available in 25 languages. &lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-ansi-language: EN; mso-bidi-font-size: 11.0pt" lang=EN&gt;IE8 makes what real people do on the web every day faster, easier, and safer. Anyone running Windows Vista, Windows XP, and Windows Server can get 32-bit and 64-bit versions now from &lt;A href="http://www.microsoft.com/ie8"&gt;&lt;FONT color=#0000ff&gt;http://www.microsoft.com/ie8&lt;/FONT&gt;&lt;/A&gt;. (Windows 7 users will receive an updated IE8 as part of the next Windows 7 milestone.)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-ansi-language: EN; mso-bidi-font-size: 11.0pt" lang=EN&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-ansi-language: EN; mso-bidi-font-size: 11.0pt" lang=EN&gt;Read more about IE8 at the &lt;A href="http://blogs.msdn.com/ie/archive/2009/03/19/internet-explorer-8-final-available-now.aspx"&gt;IE Blog&lt;/A&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-ansi-language: EN; mso-bidi-font-size: 11.0pt" lang=EN&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;I&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-ansi-language: EN; mso-bidi-font-size: 11.0pt" lang=EN&gt;Note: The comments on this blog are blocked. Pl post your comments on the &lt;/SPAN&gt;&lt;/I&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-ansi-language: EN; mso-bidi-font-size: 11.0pt" lang=EN&gt;&lt;A href="http://blogs.msdn.com/ie/"&gt;&lt;I&gt;IE team blog&lt;/I&gt;&lt;/A&gt;&lt;I&gt;, so that they can be collated at one place.&lt;o:p&gt;&lt;/o:p&gt;&lt;/I&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-ansi-language: EN; mso-bidi-font-size: 11.0pt" lang=EN&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-ansi-language: EN; mso-bidi-font-size: 11.0pt" lang=EN&gt;Gaurav Seth, Program Manager&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-ansi-language: EN; mso-bidi-font-size: 11.0pt" lang=EN&gt;JScript Team&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9490465" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jscript/archive/tags/Javascript/default.aspx">Javascript</category><category domain="http://blogs.msdn.com/jscript/archive/tags/IE/default.aspx">IE</category></item><item><title>Internet Explorer 8 Release Candidate Now Available</title><link>http://blogs.msdn.com/jscript/archive/2009/01/27/internet-explorer-8-release-candidate-now-available.aspx</link><pubDate>Mon, 26 Jan 2009 23:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9376222</guid><dc:creator>GauravS</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jscript/comments/9376222.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jscript/commentrss.aspx?PostID=9376222</wfw:commentRss><wfw:comment>http://blogs.msdn.com/jscript/rsscomments.aspx?PostID=9376222</wfw:comment><description>&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-ansi-language: EN; mso-bidi-font-size: 11.0pt" lang=EN&gt;&lt;A href="http://blogs.msdn.com/ie/archive/2009/01/26/internet-explorer-8-release-candidate-now-available.aspx"&gt;&lt;FONT color=#0000ff&gt;Internet Explorer 8 Release Candidate Is Now Available&lt;/FONT&gt;&lt;/A&gt;.&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-ansi-language: EN; mso-bidi-font-size: 11.0pt" lang=EN&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-ansi-language: EN; mso-bidi-font-size: 11.0pt" lang=EN&gt;Here is post that would help you &lt;A href="http://blogs.msdn.com/ie/archive/2009/01/26/upgrading-to-internet-explorer-8-release-candidate-1.aspx"&gt;Upgrade to Internet Explorer 8 Release Candidate 1&lt;/A&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-ansi-language: EN; mso-bidi-font-size: 11.0pt" lang=EN&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;I&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-ansi-language: EN; mso-bidi-font-size: 11.0pt" lang=EN&gt;Note: The comments on this blog are blocked. Pl post your comments on the &lt;/SPAN&gt;&lt;/I&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-ansi-language: EN; mso-bidi-font-size: 11.0pt" lang=EN&gt;&lt;A href="http://blogs.msdn.com/ie/"&gt;&lt;I&gt;IE team blog&lt;/I&gt;&lt;/A&gt;&lt;I&gt;, so that they can be collated at one place.&lt;/I&gt;&lt;/SPAN&gt;&lt;I&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-size: 11.0pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-size: 11.0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-ansi-language: EN; mso-bidi-font-size: 11.0pt" lang=EN&gt;Gaurav Seth&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-ansi-language: EN; mso-bidi-font-size: 11.0pt" lang=EN&gt;Program Manager&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-ansi-language: EN; mso-bidi-font-size: 11.0pt" lang=EN&gt;JScript Team&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-size: 11.0pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; FONT-SIZE: 10pt; mso-bidi-font-size: 11.0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9376222" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jscript/archive/tags/JavaScript+Performance+IE/default.aspx">JavaScript Performance IE</category><category domain="http://blogs.msdn.com/jscript/archive/tags/JScript+Performance+IE/default.aspx">JScript Performance IE</category><category domain="http://blogs.msdn.com/jscript/archive/tags/Javascript/default.aspx">Javascript</category><category domain="http://blogs.msdn.com/jscript/archive/tags/Jscript/default.aspx">Jscript</category><category domain="http://blogs.msdn.com/jscript/archive/tags/IE/default.aspx">IE</category><category domain="http://blogs.msdn.com/jscript/archive/tags/JScript+functions/default.aspx">JScript functions</category><category domain="http://blogs.msdn.com/jscript/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://blogs.msdn.com/jscript/archive/tags/Developers/default.aspx">Developers</category></item><item><title>JScript Debugger in Internet Explorer 8 Beta 2</title><link>http://blogs.msdn.com/jscript/archive/2008/09/17/jscript-debugger-in-internet-explorer-8-beta-2.aspx</link><pubDate>Wed, 17 Sep 2008 12:52:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8955251</guid><dc:creator>deepak.jain</dc:creator><slash:comments>31</slash:comments><comments>http://blogs.msdn.com/jscript/comments/8955251.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jscript/commentrss.aspx?PostID=8955251</wfw:commentRss><wfw:comment>http://blogs.msdn.com/jscript/rsscomments.aspx?PostID=8955251</wfw:comment><description>&lt;P&gt;In Internet Explorer 8 Beta 2 JScript team has focused on improving developer productivity. You can read &lt;A href="http://blogs.msdn.com/ie/archive/2008/09/09/what-s-new-for-jscript-for-ie8-beta-2.aspx" mce_href="http://blogs.msdn.com/ie/archive/2008/09/09/what-s-new-for-jscript-for-ie8-beta-2.aspx"&gt;'What’s new in JScript for IE8 Beta 2'&lt;/A&gt; and check out the &lt;A href="http://channel9.msdn.com/posts/janakiram/Whats-New-for-JScript-in-IE8/" mce_href="http://channel9.msdn.com/posts/janakiram/Whats-New-for-JScript-in-IE8/"&gt;JScript PM Channel 9 video&lt;/A&gt; to learn more. As part of our focus on developer productivity we have continued to invest in the IE8 Developer Tools in IE8 and added a JScript Profiler to the developer tools. You can read &lt;A href="http://blogs.msdn.com/ie/archive/2008/09/11/introducing-the-ie8-developer-tools-jscript-profiler.aspx" mce_href="http://blogs.msdn.com/ie/archive/2008/09/11/introducing-the-ie8-developer-tools-jscript-profiler.aspx"&gt;'Introducing the IE8 Developer Tools JScript Profiler'&lt;/A&gt; for more details on the profiler. The JScript profiler along with the JScript debugger we introduced in Internet Explorer Beta 1 will help you get your site working correctly and optimally. &lt;/P&gt;
&lt;P&gt;In this blog I will give more details about the following key improvements we have made in debugger for beta 2, you can check my &lt;A href="http://blogs.msdn.com/jscript/archive/2008/03/13/jscript-debugger-in-internet-explorer-8.aspx" mce_href="http://blogs.msdn.com/jscript/archive/2008/03/13/jscript-debugger-in-internet-explorer-8.aspx"&gt;JScript Debugger in Internet Explorer 8 Beta 1&lt;/A&gt; blog for more details on the features we released in Beta 1:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Improved script viewer and script explorer &lt;/LI&gt;
&lt;LI&gt;More powerful script console &lt;/LI&gt;
&lt;LI&gt;New execution control features &lt;/LI&gt;
&lt;LI&gt;Better keyboard navigation and overall usability &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;One of the goals for the script debugger has been to make sure that debugger has minimal impact on your regular browsing. We made that possible by moving JScript engine to debug mode only when you press start debugging. With this, you no longer need to keep debugging enabled in the Internet Options and thus don’t suffer the performance hit. We also wanted to provide you lot of power even when you are not debugging and ensure that you don’t need to transition to debug mode unless you have to debug. Now with Beta 2 we have added some powerful features to make that possible.&lt;/P&gt;
&lt;H3&gt;Improvements in Script Viewer&lt;/H3&gt;
&lt;P&gt;The script viewer in Beta 1 showed all the sources when you are debugging but it only showed source for main page when not debugging. Now with Beta 2 you will be able to &lt;B&gt;browse all the&lt;/B&gt; &lt;B&gt;sources even when you are not debugging&lt;/B&gt;. You can also set breakpoints even before starting debugging. The breakpoints will persist till you close IE window. To make code easier to read, we have updated the source viewer to show &lt;B&gt;sources in syntax color&lt;/B&gt;. This is similar to what you might expect in code editors such as Visual Studio. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8Beta2_D7A4/image_22.png" mce_href="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8Beta2_D7A4/image_22.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=355 alt="Source viewer with syntax colored code" src="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8Beta2_D7A4/image_thumb_9.png" width=625 border=0 mce_src="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8Beta2_D7A4/image_thumb_9.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;We have also &lt;B&gt;updated the script explorer&lt;/B&gt; dropdown to make it easy to browse and select files. Now the script explorer will show the domain to which the script file belongs to. We have also separated the eval code, other dynamic scripts and scripts executed from Console into ‘Others’ submenu of the script explorer. With this change it will be easy for you to find the script file you are looking for.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8Beta2_D7A4/image_20.png" mce_href="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8Beta2_D7A4/image_20.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=373 alt="Source explorer dropdown" src="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8Beta2_D7A4/image_thumb_8.png" width=625 border=0 mce_src="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8Beta2_D7A4/image_thumb_8.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;H3&gt;Updated Script Console&lt;/H3&gt;
&lt;P&gt;Console panel in the script tab makes it easy for you to try out new scripts. You can execute the scripts in the console irrespective of whether you are debugging or not. In Beta 2 we have improved the look and feel of the Console so that it is easy to read the output. &lt;/P&gt;
&lt;P&gt;To make it easy for you to fix errors on your page, &lt;B&gt;Console also logs all the script errors&lt;/B&gt;. These errors will be logged in the Console once Developer Tools has been opened for the tab. You can also navigate to the error location in script by clicking on the error hyperlink in the Console.&lt;/P&gt;
&lt;P&gt;To help you log message to Console from your script source we have added support for ‘console’ object. Developer Tools provides multiple level of logging with &lt;B&gt;console.log()&lt;/B&gt;, &lt;B&gt;console.info()&lt;/B&gt;, &lt;B&gt;console.warn()&lt;/B&gt;, &lt;B&gt;console.error()&lt;/B&gt; and &lt;B&gt;console.assert(). &lt;/B&gt;Instead of using &lt;B&gt;window.alert&lt;/B&gt; for debugging, you can use these console commands to log messages to the Console. You can call these console commands with a list of arguments that will be concatenated to generate the output string. The input parameters can also be formatted by using substitution patterns in the style of printf(). &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8Beta2_D7A4/image_18.png" mce_href="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8Beta2_D7A4/image_18.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=426 alt="Console with runtime error and console.log output" src="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8Beta2_D7A4/image_thumb_7.png" width=489 border=0 mce_src="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8Beta2_D7A4/image_thumb_7.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;You can also control what messages you want to see in the Console pane by using the context menu. Context menu also provide you option to clear the console of all messages. If you only want to clear console.log messages, you can use &lt;B&gt;console.clear()&lt;/B&gt;.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8Beta2_D7A4/image_16.png" mce_href="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8Beta2_D7A4/image_16.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=425 alt="Context menu for Console" src="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8Beta2_D7A4/image_thumb_6.png" width=632 border=0 mce_src="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8Beta2_D7A4/image_thumb_6.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;The console.log is extensible and you can add your own console commands through custom scripts. For example you can add console.debug() command which takes string arguments by using following script – &lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: " yes?="yes?" mso-no-proof:="mso-no-proof:" new?;="new?;" courier="courier"&gt;&lt;FONT face="Courier New"&gt;console.debug = &lt;SPAN style="COLOR: blue"&gt;function&lt;/SPAN&gt;(){ &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: " yes?="yes?" mso-no-proof:="mso-no-proof:" new?;="new?;" courier="courier"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;var&lt;/SPAN&gt; args = &lt;SPAN style="COLOR: #a31515"&gt;""&lt;/SPAN&gt;; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: " yes?="yes?" mso-no-proof:="mso-no-proof:" new?;="new?;" courier="courier"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: " yes?="yes?" mso-no-proof:="mso-no-proof:" new?;="new?;" courier="courier"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;for&lt;/SPAN&gt;(&lt;SPAN style="COLOR: blue"&gt;var&lt;/SPAN&gt; x=0; x&amp;lt;arguments.length; x++) &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: " yes?="yes?" mso-no-proof:="mso-no-proof:" new?;="new?;" courier="courier"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: " yes?="yes?" mso-no-proof:="mso-no-proof:" new?;="new?;" courier="courier"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;{ &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: " yes?="yes?" mso-no-proof:="mso-no-proof:" new?;="new?;" courier="courier"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: " yes?="yes?" mso-no-proof:="mso-no-proof:" new?;="new?;" courier="courier"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;args += arguments[x]; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: " yes?="yes?" mso-no-proof:="mso-no-proof:" new?;="new?;" courier="courier"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: " yes?="yes?" mso-no-proof:="mso-no-proof:" new?;="new?;" courier="courier"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;} &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: " yes?="yes?" mso-no-proof:="mso-no-proof:" new?;="new?;" courier="courier"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: " yes?="yes?" mso-no-proof:="mso-no-proof:" new?;="new?;" courier="courier"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;console.log(&lt;SPAN style="COLOR: #a31515"&gt;"DEBUG: "&lt;/SPAN&gt; + args); &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: " yes?="yes?" mso-no-proof:="mso-no-proof:" new?;="new?;" courier="courier"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/SPAN&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;This can be easily enhanced to take formatted strings.&lt;/P&gt;
&lt;H3&gt;More execution control features&lt;/H3&gt;
&lt;P&gt;The Developer Tools in Beta 1 offered execution control features like Break All, Step In, Step Out, Step Over. In Beta 2 we have added support for &lt;B&gt;Conditional Breakpoints&lt;/B&gt; and &lt;B&gt;Break on Error&lt;/B&gt;. In conditional breakpoint you can give any valid JScript expression to be evaluated and debugger will only halt if the expression evaluates to true. Break on Error provides a toggle switch to control whether debugger will break on JScript runtime error or continue while ignoring the error. Regardless of the toggle state the error will be logged to the console so that you can investigate them at your convenience.&lt;/P&gt;
&lt;P&gt;We have also extended the just-in-time debugging experience of Internet Explorer. Although with IE8 you don’t need to keep debugging enabled from Internet Options, still if you have debugging enabled in the IE and you hit a script error, you now get an option to use Developer Tools debugger. You can still use Visual Studio and other stand alone debuggers by unselecting the check-box in the message and clicking on Yes.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8Beta2_D7A4/image_14.png" mce_href="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8Beta2_D7A4/image_14.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=225 alt="Just in time debugging dialog" src="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8Beta2_D7A4/image_thumb.png" width=401 border=0 mce_src="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8Beta2_D7A4/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;H3&gt;Improved Usability&lt;/H3&gt;
&lt;P&gt;In Beta 2 we have added &lt;B&gt;extensive keyboard shortcuts&lt;/B&gt;. If you have been using Visual Studio for debugging script in IE, you already know the keyboard shortcuts! We have kept the keyboard shortcuts as close to Visual Studio as possible. List of&lt;B&gt; &lt;/B&gt;all the keyboard shortcuts supported by JScript Debugger is available &lt;A href="http://msdn.microsoft.com/en-us/library/cc848896(VS.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/cc848896(VS.85).aspx"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;We have added search functionality to Developer Tools. Searching in Script tab will show you the search term highlighted in the source viewer. When you browse to a new site or select another file from the source explorer dropdown the search term will continue to be highlighted. &lt;/P&gt;
&lt;P&gt;We have also made other improvements like increased tool tips to improve the usability and looks of the debugger.&lt;/P&gt;
&lt;H3&gt;More Information&lt;/H3&gt;
&lt;P&gt;For more information on the Developer Tools and JScript Debugger check out these articles:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/cc848892(VS.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/cc848892(VS.85).aspx"&gt;Developer Tools: Script Debugging Overview&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/cc848896(VS.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/cc848896(VS.85).aspx"&gt;Developer Tools: Keyboard Shortcuts&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/jscript/archive/2008/03/13/jscript-debugger-in-internet-explorer-8.aspx" mce_href="http://blogs.msdn.com/jscript/archive/2008/03/13/jscript-debugger-in-internet-explorer-8.aspx"&gt;JScript Debugger in Internet Explorer 8 Beta 1&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/ie/archive/2008/09/03/developer-tools-in-internet-explorer-8-beta-2.aspx" mce_href="http://blogs.msdn.com/ie/archive/2008/09/03/developer-tools-in-internet-explorer-8-beta-2.aspx"&gt;Developer Tools in Internet Explorer 8 Beta 2&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/cc848894(VS.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/cc848894(VS.85).aspx"&gt;Discovering the Internet Explorer 8 Developer Tools&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/cc848893(VS.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/cc848893(VS.85).aspx"&gt;Internet Explorer 8 Developer Tools GUI Reference&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;We look forward to your feedback about the debugger so please leave us a comment in this post. Thanks, and enjoy IE8 Beta 2! &lt;/P&gt;
&lt;P&gt;Deepak Jain&lt;/P&gt;
&lt;P&gt;Program Manager&lt;/P&gt;
&lt;P&gt;JScript Team&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8955251" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jscript/archive/tags/Javascript/default.aspx">Javascript</category><category domain="http://blogs.msdn.com/jscript/archive/tags/Debugging/default.aspx">Debugging</category><category domain="http://blogs.msdn.com/jscript/archive/tags/Jscript/default.aspx">Jscript</category><category domain="http://blogs.msdn.com/jscript/archive/tags/IE/default.aspx">IE</category><category domain="http://blogs.msdn.com/jscript/archive/tags/Developers/default.aspx">Developers</category></item><item><title>Performance Optimization of Arrays - Part II</title><link>http://blogs.msdn.com/jscript/archive/2008/04/08/performance-optimization-of-arrays-part-ii.aspx</link><pubDate>Wed, 09 Apr 2008 08:20:11 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8371165</guid><dc:creator>JSBlog</dc:creator><slash:comments>18</slash:comments><comments>http://blogs.msdn.com/jscript/comments/8371165.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jscript/commentrss.aspx?PostID=8371165</wfw:commentRss><wfw:comment>http://blogs.msdn.com/jscript/rsscomments.aspx?PostID=8371165</wfw:comment><description>&lt;p&gt;Hello Friends,&lt;/p&gt;  &lt;p&gt;Hope you have read &lt;a href="http://blogs.msdn.com/jscript/archive/2008/03/25/performance-optimization-of-arrays-part-i.aspx" target="_blank"&gt;part I of this topic&lt;/a&gt; which I posted few days ago. If not then I would suggest going through that first as this &lt;a href="http://blogs.msdn.com/jscript/archive/2008/03/25/performance-optimization-of-arrays-part-i.aspx" target="_blank"&gt;post&lt;/a&gt; is just a continuation of that one.&lt;/p&gt;  &lt;p&gt;So coming to the point, here is the second reason -&lt;/p&gt;  &lt;p&gt;&lt;b&gt;2. &amp;#8220;JavaScript arrays are sparse arrays&amp;#8221;&lt;/b&gt;&amp;#8211; JavaScript allows arrays to be sparse therefore, when you write arrayObj = new Array(100); unlike C runtime, JScript doesn&amp;#8217;t allocate any slot/memory for those 100 entries up front. It allocates slot for an index only when an index is to be populated with a value, for example&amp;#8230;&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;arrayObj = &lt;span class="kwrd"&gt;new&lt;/span&gt; Array(100);&lt;/pre&gt;

  &lt;pre&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;arrayObj[10] = 10;&lt;/pre&gt;

  &lt;pre&gt;&amp;#160;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;In this example, the array size is 100, but in the actual physical memory there is only one slot allocated for this array. Remaining 99 slots don&amp;#8217;t exist at all. &lt;/p&gt;

&lt;p&gt;Wondering how this factor contributes to the bad performance? Not allocating memory for all the slots up front is good design. Isn&amp;#8217;t it? &lt;/p&gt;

&lt;p&gt;Well, JScript always assumed that all arrays are sparse. So even if you had a fully dense array in your code, JScript runtime would treat it like a sparse array only. So if you are going to do a pop() operation on a dense JScript array, JScript just won&amp;#8217;t go and delete the last indexed entry and update the length attribute. It does something which is extremely performant for sparse arrays, but equally under-performant for dense arrays. Let&amp;#8216;s see what it is all about.&lt;/p&gt;

&lt;p&gt;Internally, for each Array object, JScript runtime maintains a table (different from HashTable, let&amp;#8217;s call it TrackerTable) which is nothing but a list of pointers to actual entries in the hash table. So if you just create an Array Object of size 100, and add 10 entries (indexed or named), the TrackerTable will have 10 pointers pointing to actual entries in the hash table. Let&amp;#8217;s take one simple example&amp;#8230;&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;arrayObj = &lt;span class="kwrd"&gt;new&lt;/span&gt; Array(100);&lt;/pre&gt;

  &lt;pre&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;arrayObj[10] = 10;&lt;/pre&gt;

  &lt;pre&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;arrayObj.length = 90;&lt;/pre&gt;

  &lt;pre&gt;&amp;#160;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;In this example, I just create an Array of size 100, and populated index 10. Next I reduce length of array to 90. Since the length has been reduced, entries from 90 to 99 have to be deleted. The ideal thing to do would be to delete &amp;lt;key, value&amp;gt; pair from hash table for key = 90 to 99. That means 10 operations on Hash table. JScript is smart here and saves 9 out of 10 operations.&lt;/p&gt;

&lt;p&gt;What JScript actually does is that it goes to the TrackerTable, iterates through it, for every entry it checks if it falls between deletion range (90-99 in this case), if yes then delete it. In above example, TrackerTable had only one entry. So instead of 10 operations on hash table, JScript does only one iteration and performs better.&lt;/p&gt;

&lt;p&gt;However what if the array was a dense array and all the indexed entries from 0 to 100 were populated? Unfortunately in this case too, JScript would follow the same logic. Therefore it would do 100 iterations over TrackerTable and end up doing 90 more operations. &lt;/p&gt;

&lt;p&gt;&lt;b&gt;How it was fixed&amp;#8211; &lt;/b&gt;As I said in the &lt;a href="http://blogs.msdn.com/jscript/archive/2008/03/25/performance-optimization-of-arrays-part-i.aspx" target="_blank"&gt;last post&lt;/a&gt;, in IE8 JScript we have the mechanism in place to decide whether an array is a sparse or dense. So we have changed the implementation to take sparse path only when the array is actually sparse. That means for operations on dense arrays, we don&amp;#8217;t use TrackerTable anymore. We directly go to the right storage and get the things done in fast manner.&lt;/p&gt;

&lt;p&gt;So this is all I had to tell about array improvements. Hope you got an idea of what was/is happening under the hood? If not, do leave a note and I would try to address that. And yes, I have lot many interesting things to share with you all, so keep checking this blog.&lt;/p&gt;

&lt;p&gt;-JP&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8371165" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jscript/archive/tags/JavaScript+Performance+IE/default.aspx">JavaScript Performance IE</category><category domain="http://blogs.msdn.com/jscript/archive/tags/Javascript/default.aspx">Javascript</category><category domain="http://blogs.msdn.com/jscript/archive/tags/Jscript/default.aspx">Jscript</category><category domain="http://blogs.msdn.com/jscript/archive/tags/IE/default.aspx">IE</category></item><item><title>Insight into String Concatenation in JScript</title><link>http://blogs.msdn.com/jscript/archive/2008/03/19/insight-into-string-concatenation-in-jscript.aspx</link><pubDate>Wed, 19 Mar 2008 13:35:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8325440</guid><dc:creator>janakiram.msv</dc:creator><slash:comments>8</slash:comments><comments>http://blogs.msdn.com/jscript/comments/8325440.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jscript/commentrss.aspx?PostID=8325440</wfw:commentRss><wfw:comment>http://blogs.msdn.com/jscript/rsscomments.aspx?PostID=8325440</wfw:comment><description>&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Hello Friends,&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Have you read my &lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/jscript/archive/2007/10/17/performance-issues-with-string-concatenation-in-jscript.aspx"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;post on the String Concatenation&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt; issue? If yes, then I can sense your curiosity to know a little bit more about what went on behind the scenes. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;For example, what is the new algorithm used to get to the performance results projected in the blog, what were the issues faced, how tough/easy it was to implement etc. etc. Well, I didn’t talk much about all these last time as we were still testing the fix and things were not stable at that point of time. But now since IE8 Beta is out and you are already running it on your box (if not, &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/windows/products/winfamily/ie/ie8/readiness/Install.htm"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;install from here&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;) and loving it &lt;/FONT&gt;&lt;SPAN style="FONT-FAMILY: Wingdings; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-char-type: symbol; mso-symbol-font-family: Wingdings"&gt;&lt;SPAN style="mso-char-type: symbol; mso-symbol-font-family: Wingdings"&gt;J&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;, why not talk a little bit more and try to get few of the queries answered.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;In the new implementation, which is running on your box if you are reading this in IE8, we don’t produce actual regular string for each append operation anymore. Instead, we keep the information about all strings which took part in the append operation. The production of actual regular string is deferred for later point of time.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;Let’s apply it on the same example I used in the previous blog post… &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;SPAN style="COLOR: #7030a0; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"&gt;&lt;FONT size=3&gt;resultStr = “Jscript” + “String” + “Append” + “problem”&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;In the previous implementation, we used to produce the actual string and store it in the resultStr. In the current implementation, resultStr points to a structure (let’s call it &lt;B style="mso-bidi-font-weight: normal"&gt;pseudo-string&lt;/B&gt;), which keeps the details like what all strings are needed to produce actual string and in which order.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;The logic looks simple. However there were few issues we faced while implementing it, which I think are worth sharing here… &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;When to Convert pseudo-string back to actual String&lt;/B&gt; – As Eric mentioned in his &lt;/FONT&gt;&lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/ericlippert/archive/2003/10/20/53248.aspx"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;blog&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;, their ‘Fancy-String’ implementation was heavy as they had to convert ‘Fancy–Strings’ back to regular string every time one is passed by variable reference. We also had this big question facing us – ‘When to convert pseudo-strings back to regular strings’? Should it be done as soon as ‘pseudo-string’ has grown to certain size or should it be done soon after append operation is done? Or should it be done when it is passed by variable reference? We evaluated all these approaches but none of them seemed to be giving the kind of gains we wanted. Later we thought why not defer the conversion to the point when pseudo-string can’t serve the purpose and we have to have the regular string. In other words, do the conversion only when actual regular string is needed. For example do the conversion when a ‘subStr’ or ‘trim’ operation is performed on the ‘pseudo – string’ or when the pseudo string needs to be passed somewhere out of the engine, like IE or VBScript, that doesn’t understand pseudo-strings. We tried it and yes, with this, we hit bulls-eye&lt;/FONT&gt;&lt;SPAN style="FONT-FAMILY: Wingdings; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-char-type: symbol; mso-symbol-font-family: Wingdings"&gt;&lt;SPAN style="mso-char-type: symbol; mso-symbol-font-family: Wingdings"&gt;J&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Multiple References to single Pseudo-String&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;SPAN style="mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;If there are multiple references to a single ‘pseudo-string’, then we want to do the conversion only once. For example…&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt 0.75in; mso-add-space: auto" class=MsoListParagraphCxSpFirst&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;&lt;SPAN style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: FR; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" lang=FR&gt;X = “Hi” + “Microsoft”;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt 0.75in; mso-add-space: auto" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="mso-ansi-language: FR; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" lang=FR&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Y = X;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt 0.75in; mso-add-space: auto" class=MsoListParagraphCxSpLast&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-ansi-language: FR; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" lang=FR&gt;&lt;SPAN style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;Z= X;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;SPAN style="mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;In this example X, Y and Z are pointing to the same pseudo-string. Now if x.toString() is called, one approach is, allocate a buffer of size 11 and copy the strings “HI” and “Microsoft” one by one to the buffer. Later when Y.toString() and Z.toString() are called, we again allocate new buffers for each of them and copy the strings.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;SPAN style="mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Hmmm. with such multiple allocations and copy operations, are we not back to the problem we were trying to solve? Yes, we are. &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;SPAN style="mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;So how did we address this? Well, we decided not to have X, Y and Z point to actual pseudo-String. Instead they point to a proxy object, which keeps actual reference to pseudo-string. When X.toString() is called, conversion from pseudo-string to regular string happens (a new buffer of enough size is allocated and strings are copied one by one) and the proxy object is made point to regular string. Later when Y.toString() and z.toString() are called, we need not do the conversion again as they point to the proxy-object which already points to the regular string. &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;SPAN style="mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;So X, Y and Z always point to the proxy-object. Proxy object may either contain a pseudo-string or a regular string, depending upon the time of conversion.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;What if Pseudo-string is partially converted to regular string?&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt 0.75in; mso-add-space: auto" class=MsoListParagraphCxSpFirst&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;X = “Jscript” + “Team”;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: 0.25in; mso-add-space: auto" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Z = X&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;+ “Microsoft”;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt 0.75in; TEXT-INDENT: 0.25in; mso-add-space: auto" class=MsoListParagraphCxSpLast&gt;&lt;SPAN style="mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;X.toString();&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;SPAN style="mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;In above snippet, X is a pseudo string and is used in formation of another pseudo string Z. Now toString() is called on X, so X has to be converted to regular string. Fine. I can do it. But wait a moment. X is used by another pseudo string Z. I can’t convert it just like that? &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;SPAN style="mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Well, as I said, all references to a pseudo-string are through the proxy-object. Hence Z also refers to the proxy object for X, not to the actual pseudo-string. So even after X is converted to the regular string, references to proxy object remain alive and things work perfectly.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;&lt;FONT face=Calibri&gt;And yes we had to test it &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-FAMILY: Wingdings; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-char-type: symbol; mso-symbol-font-family: Wingdings"&gt;&lt;SPAN style="mso-char-type: symbol; mso-symbol-font-family: Wingdings"&gt;J&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;SPAN style="mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;‘Maintaining compatibility is priority no. 1’ – this is the mantra we all in the team swear by. At any cost we had to ensure that we don’t break real world when fix is out. Our test team has done an awesome job in ensuring it. They found couple of cool crashes, which were not directly in the new implementation, but because new implementation broke few assumptions made in the engine. Interesting part is that they were reported on the last day of our internal milestones; therefore we had to sit whole night gazing at our screens, fixing and testing them.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;SPAN style="mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;This is all about string append problem and I hope it was an interesting read. One more interesting performance improvement I have worked on in this release and would like to share with you all is ‘Arrays’, but we’ll leave that for another post so stay tuned.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;SPAN style="mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3 face=Calibri&gt;-&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;JP&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8325440" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jscript/archive/tags/JScript+Performance+IE/default.aspx">JScript Performance IE</category><category domain="http://blogs.msdn.com/jscript/archive/tags/Javascript/default.aspx">Javascript</category><category domain="http://blogs.msdn.com/jscript/archive/tags/Jscript/default.aspx">Jscript</category><category domain="http://blogs.msdn.com/jscript/archive/tags/IE/default.aspx">IE</category></item><item><title>IE8 Script Debugger - Under the Hood</title><link>http://blogs.msdn.com/jscript/archive/2008/03/18/ie8-script-debugger-under-the-hood.aspx</link><pubDate>Tue, 18 Mar 2008 12:55:23 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8311597</guid><dc:creator>Sheetal Kamat</dc:creator><slash:comments>7</slash:comments><comments>http://blogs.msdn.com/jscript/comments/8311597.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jscript/commentrss.aspx?PostID=8311597</wfw:commentRss><wfw:comment>http://blogs.msdn.com/jscript/rsscomments.aspx?PostID=8311597</wfw:comment><description>&lt;p&gt;IE8 Beta1 (download available &lt;a href="http://www.microsoft.com/windows/products/winfamily/ie/ie8/default.mspx"&gt;here&lt;/a&gt;) now includes a Script debugger that is part of IE8 Developer Tools. This Script debugger was built by the JScript team and I hope you have been using it to fix all script errors when building your web applications.&lt;/p&gt;  &lt;p&gt;In this post I will be discuss the design of the script debugger.&lt;/p&gt;  &lt;p&gt;The debugger is designed with Active Debugging Framework (more information &lt;a href="http://msdn2.microsoft.com/en-us/magazine/cc301316.aspx"&gt;here&lt;/a&gt;). Here is the block diagram of how debugger looks. &lt;/p&gt;  &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="246" alt="Debugger Design" src="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/IE8ScriptDebuggerUndertheHood_D8D5/Debugger%20Design_1.jpg" width="625" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;A brief description about the different components in the above block diagram: &lt;/p&gt;  &lt;p&gt;IE &amp;#8211; the host controls the JScript engine by providing the script code and other objects that are needed to execute that code. &lt;/p&gt;  &lt;p&gt;The JScript engine is responsible for parsing and executing script code and handling other debugger related operations like stack enumeration, expression evaluation, variable inspection, and both parsing-time and runtime error notifications. The JScript engine interacts with the IE to resolve the external references to named objects (eg. window or document), it also notifies host about execution errors and script state changes.&lt;/p&gt;  &lt;p&gt;The Process Debug Manager (PDM) manages various process related information (where is the process running, thread information, parent-child relationship among threads-processes etc.) and also co-ordinates the interaction between all components like engine, debugger, host etc. &lt;/p&gt;  &lt;p&gt;Debugger is the component that implements the UI and other functionality that normally comes to our mind with word script debugger. &lt;/p&gt;  &lt;p&gt;When we started work on the design for a script debugger for IE8 Developer Tools, the first decision was whether the debugger would be residing in the same process or in a different process. Since the primary reason for building a debugger that is available with IE8 Developer Tools was to provide an integrated debugging experience, we decided to go down the path of building an in-process debugger. Also, having the script debugger in the same process would result in better integration with the host since the debugger will have direct access to host events like say page load and there would be fewer COM calls required to interact with the host or engine.&lt;/p&gt;  &lt;p&gt;As soon as we went down this path of having the script debugger in the same process, we hit a fundamental issue, which was that the JScript engine is loaded by the IE UI (rendering engine) thread. What this meant was that when a breakpoint is hit, the UI thread would halt and the script debugger wouldn&amp;#8217;t even be displayed. To address this issue, we designed the debugger so that the UI of the debugger would be on a different thread than the script engine.&lt;/p&gt;  &lt;p&gt;But with this choice we now had to address the issue of interaction of the debugger with PDM, since this component expects the debugger to be on the same thread. So we split the debugger into two components. The first one, the UI component, renders the debugger application and runs as a separate thread. And the second one, the core or worker component interacts with PDM and host to provide data to the UI component for rendering, and runs on IE&amp;#8217;s UI thread. &lt;/p&gt;  &lt;p&gt;I hope this blog post explains some of the design decisions of the script debugger of the IE8 Developer Tools and the impact on the functionality of the script debugger. &lt;/p&gt;  &lt;p&gt;So how have you been using the script debugger to improve your productivity? We would love to hear from you on your experiences using the script debugger and would also like to know what features you find the most useful. &lt;/p&gt;  &lt;p&gt;Sheetal Kamat, SDE, JScript.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8311597" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jscript/archive/tags/Javascript/default.aspx">Javascript</category><category domain="http://blogs.msdn.com/jscript/archive/tags/Debugging/default.aspx">Debugging</category><category domain="http://blogs.msdn.com/jscript/archive/tags/Jscript/default.aspx">Jscript</category><category domain="http://blogs.msdn.com/jscript/archive/tags/IE/default.aspx">IE</category><category domain="http://blogs.msdn.com/jscript/archive/tags/Developers/default.aspx">Developers</category></item><item><title>JScript Debugger in Internet Explorer 8</title><link>http://blogs.msdn.com/jscript/archive/2008/03/13/jscript-debugger-in-internet-explorer-8.aspx</link><pubDate>Thu, 13 Mar 2008 12:22:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8179743</guid><dc:creator>deepak.jain</dc:creator><slash:comments>19</slash:comments><comments>http://blogs.msdn.com/jscript/comments/8179743.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jscript/commentrss.aspx?PostID=8179743</wfw:commentRss><wfw:comment>http://blogs.msdn.com/jscript/rsscomments.aspx?PostID=8179743</wfw:comment><description>&lt;P&gt;As Shreesh mentioned in his &lt;A href="http://blogs.msdn.com/jscript/archive/2008/03/05/jscript-in-internet-explorer-8-beta-1-for-developers.aspx" mce_href="http://blogs.msdn.com/jscript/archive/2008/03/05/jscript-in-internet-explorer-8-beta-1-for-developers.aspx"&gt;blog&lt;/A&gt;, Internet Explorer 8 has a built-in JScript debugger. With Internet Explorer Developer Tools you get a &lt;B&gt;light weight&lt;/B&gt; JScript debugger that is &lt;B&gt;well integrated in the browser&lt;/B&gt; and available out of the box. This is an &lt;B&gt;in-proc debugger&lt;/B&gt; making sure that you don’t have to launch a separate app. It has familiar Visual Studio feel and features like call stacks, watches, locals and immediate window.&lt;/P&gt;
&lt;P&gt;To get to the debugger just press &lt;B&gt;SHIFT+F12&lt;/B&gt;, or click the developer tools icon in the command bar. After launching the Developer Tools, switch to the script tab.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image002_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image002_2.jpg"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=97 alt="Toolbar - SHIFT+F12" src="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image002_thumb.jpg" width=468 border=0 mce_src="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image002_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Before starting debugging you can browse the source code of the websites’ main page and also use immediate window to try out JScript code. You can start the debugger session by clicking on the ‘Start Debugging’ button. The debugger lets you debug &lt;B&gt;even when debugging is disabled&lt;/B&gt; in Internet Options Control Panel. This will allow you to enable debugging only for the IE instance you are debugging. All other IE instances will still be in non-debug mode making sure that you don’t get script error dialogs. This will also make sure that debugging won’t have any performance hit on IE instances other than the one being debugged. Debugger &lt;B&gt;will refresh the web page&lt;/B&gt; with your consent, in case debugging was previously disabled. If you want to avoid page refresh, you can enable debugging from Internet Options. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image004_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image004_2.jpg"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=216 alt="Debugging Not Enabled" src="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image004_thumb.jpg" width=496 border=0 mce_src="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image004_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;After starting debugging, the script debugger provides you execution control. Similar to Visual Studio you can set breakpoints by clicking in the source viewer next to the line number. You can also use context menu or keyboard shortcut (&lt;B&gt;F9&lt;/B&gt;) to set breakpoints on the script statement at the cursor location in source viewer. If you have multiple script statements in a line of code, you can set multiple breakpoints on that line and they will be hit based on script statement. In case you want to break execution at first script statement, debugger provides a &lt;B&gt;Break All&lt;/B&gt; button in the toolbar. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image006_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image006_2.jpg"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=36 alt=Pause src="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image006_thumb.jpg" width=136 border=0 mce_src="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image006_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;You can also &lt;B&gt;browse the included files and eval() code&lt;/B&gt; using the source explorer drop down list.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image008_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image008_2.jpg"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=215 alt="Browse Scripts" src="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image008_thumb.jpg" width=628 border=0 mce_src="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image008_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;While debugging, debugger will also &lt;B&gt;break on script runtime error&lt;/B&gt; locations. Debugger will only highlight the script statement that will be executed. On a breakpoint debugger provides you Visual Studio like options to control the execution. You can use following commands to control the execution:&lt;/P&gt;
&lt;P&gt;- &lt;B&gt;Step Into&lt;/B&gt;: Executes the next statement of script and pauses, even if the next statement is inside a new method. You can either use toolbar button or keyboard shortcut &lt;B&gt;F11&lt;/B&gt;.&lt;/P&gt;
&lt;P&gt;- &lt;B&gt;Step Over&lt;/B&gt;: Executes the next statement of script, continues until the next line of script in the current method, and then pauses. You can either use toolbar button or keyboard shortcut &lt;B&gt;F8&lt;/B&gt;.&lt;/P&gt;
&lt;P&gt;- &lt;B&gt;Step Out&lt;/B&gt;: Continues executing script until the next statement in the method that called the current method. You can either use toolbar button or keyboard shortcut &lt;B&gt;SHIFT+F11&lt;/B&gt;.&lt;/P&gt;
&lt;P&gt;- &lt;B&gt;Continue&lt;/B&gt;: Continue running script without pausing until hitting another breakpoint (if any are set). You can either use toolbar button or keyboard shortcut &lt;B&gt;F5&lt;/B&gt;.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image010_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image010_2.jpg"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=105 alt="Execution Control" src="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image010_thumb.jpg" width=496 border=0 mce_src="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image010_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;At breakpoints you can navigate call stack and inspect local variables. All this functionality is provided in the right hand side tabs of the debugger. Let’s just take a look at each of these tabs – &lt;/P&gt;
&lt;P&gt;&lt;B&gt;Locals – &lt;/B&gt;This tab displays the name, value, and type of all variables available in the current execution scope. Just like Visual Studio, you can drill down in objects hierarchies and change the value of variables. When you step in or step out the variables which have been modified will be indicated with value in red color.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Watch –&lt;/B&gt; Watches are user defined variables or expressions to be watched at each halt of script execution. Like locals you can drill down object hierarchies, change values and observe values changed during stepping through code. Watches can be added either by typing a variable name or expression into the watch window or through context menu available in source view.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image012_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image012_2.jpg"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=249 alt="Watch Window" src="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image012_thumb.jpg" width=628 border=0 mce_src="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image012_thumb.jpg"&gt;&lt;/A&gt;&lt;/B&gt;&lt;B&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Call Stack –&lt;/B&gt; Whenever the execution is paused at a breakpoint call stack tab will let you transverse the stack and inspect the variables at that execution context. Double clicking on the stack entry will take you to the location in source code.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image014_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image014_2.jpg"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=249 alt="Call Stack" src="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image014_thumb.jpg" width=628 border=0 mce_src="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image014_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Immediate Window –&lt;/B&gt; Immediate window can be used to run scripts at the runtime. While on a breakpoint the script will be run in the current execution context. You can also use immediate window for running script while not on breakpoint or &lt;B&gt;even when not debugging&lt;/B&gt;. In these scenarios, scripts entered in the immediate window will run in the global scope. Immediate window also gives you option to provide multiline script block by expanding the input window. This can be done using the ‘Multiline’ button. You can go back to the single line input by clicking on the ‘Single Line mode’ button.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image016_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image016_2.jpg"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=249 alt="Immediate Window" src="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image016_thumb.jpg" width=628 border=0 mce_src="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image016_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Breakpoint&lt;/B&gt; – This tab displays all the breakpoints currently set. You can enable/disable breakpoints by using the check box or the context menu. You can also remove breakpoints using the context menu. Double clicking on the breakpoint will take you to the source code. Breakpoints are maintained until IE8 Developers Tools is closed.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image018_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image018_2.jpg"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=249 alt="Breakpoint Window" src="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image018_thumb.jpg" width=628 border=0 mce_src="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image018_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;This debugger has inbuilt &lt;B&gt;support to debug eval() code and event handlers&lt;/B&gt;. You don’t need to enable any options to debug them.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image020_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image020_2.jpg"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=318 alt="Debugging eval Code" src="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image020_thumb.jpg" width=628 border=0 mce_src="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image020_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image022_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image022_2.jpg"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=232 alt="Debugging Event Handlers" src="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image022_thumb.jpg" width=628 border=0 mce_src="http://blogs.msdn.com/blogfiles/jscript/WindowsLiveWriter/JScriptDebuggerinInternetExplorer8_916F/clip_image022_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;More details on the debugger are available in the &lt;A href="http://go.microsoft.com/fwlink/?LinkId=110279" mce_href="http://go.microsoft.com/fwlink/?LinkId=110279"&gt;Developer Tools Whitepaper&lt;/A&gt;. We will also have some debugger videos up very soon. Keep checking this blog. John from IE team has a &lt;A href="http://blogs.msdn.com/ie/archive/2008/03/07/improved-productivity-through-internet-explorer-8-developer-tools.aspx" mce_href="http://blogs.msdn.com/ie/archive/2008/03/07/improved-productivity-through-internet-explorer-8-developer-tools.aspx"&gt;blog entry&lt;/A&gt;&amp;nbsp; describing the Developer tool and also some &lt;A href="http://msdn2.microsoft.com/en-us/ie/cc307214.aspx?wt.slv=topsectionsee" mce_href="http://msdn2.microsoft.com/en-us/ie/cc307214.aspx?wt.slv=topsectionsee"&gt;overview videos&lt;/A&gt;. The release notes are available &lt;A href="http://support.microsoft.com/kb/949787" mce_href="http://support.microsoft.com/kb/949787"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;We would love to hear back from you about this debugger. Let us know how this debugger has helped you and also any issue you might have encountered.&lt;/P&gt;
&lt;P&gt;Thanks and happy debugging!&lt;/P&gt;
&lt;P&gt;Deepak Jain&lt;/P&gt;
&lt;P&gt;Program Manager&lt;/P&gt;
&lt;P&gt;JScript Team&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8179743" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jscript/archive/tags/Javascript/default.aspx">Javascript</category><category domain="http://blogs.msdn.com/jscript/archive/tags/Debugging/default.aspx">Debugging</category><category domain="http://blogs.msdn.com/jscript/archive/tags/Jscript/default.aspx">Jscript</category><category domain="http://blogs.msdn.com/jscript/archive/tags/IE/default.aspx">IE</category><category domain="http://blogs.msdn.com/jscript/archive/tags/Developers/default.aspx">Developers</category></item><item><title>JScript in Internet Explorer 8 Beta 1 for Developers</title><link>http://blogs.msdn.com/jscript/archive/2008/03/05/jscript-in-internet-explorer-8-beta-1-for-developers.aspx</link><pubDate>Wed, 05 Mar 2008 17:10:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8054964</guid><dc:creator>janakiram.msv</dc:creator><slash:comments>32</slash:comments><comments>http://blogs.msdn.com/jscript/comments/8054964.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jscript/commentrss.aspx?PostID=8054964</wfw:commentRss><wfw:comment>http://blogs.msdn.com/jscript/rsscomments.aspx?PostID=8054964</wfw:comment><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; TEXT-ALIGN: justify"&gt;&lt;FONT face=Calibri size=3&gt;Making developers more productive through the design, development, and debug phases of web application development is one of the key goals for Internet Explorer 8. I’d like to take this opportunity to walk you through the features that the JScript team contributed to IE8 Beta 1 for Developers. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; TEXT-ALIGN: justify"&gt;&lt;FONT face=Calibri size=3&gt;Let me start with the JScript language and the scripting engine optimization. Performance of the JScript engine has been our number one goal for the Beta1 release. With today’s rich AJAX web-applications, some of the most common JScript operations include String and Array operations. We received feedback from developers on the slow performance of the inbuilt string concatenation functions of JScript. This is not a new problem and quite a lot has been written about the issue (discussed in this Jscript blog &lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/jscript/archive/2007/10/17/performance-issues-with-string-concatenation-in-jscript.aspx" mce_href="http://blogs.msdn.com/jscript/archive/2007/10/17/performance-issues-with-string-concatenation-in-jscript.aspx"&gt;&lt;FONT face=Calibri color=#0000ff size=3&gt;post&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt;). With IE8, we fixed this problem in the JScript engine. String concatenation is now many times faster when compared to the previous JScript engine.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; TEXT-ALIGN: justify"&gt;&lt;FONT face=Calibri size=3&gt;Prior to this optimization of string concatenation, most developers used Array join operations to achieve the same result. We were aware of this tradeoff and made sure that the Array operations are also optimized. In either scenario, developers will experience significant performance gains. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; TEXT-ALIGN: justify"&gt;&lt;FONT face=Calibri size=3&gt;One of the challenges for the team was to understand the language compatibility and issues that existed in our JScript implementation of the &lt;/FONT&gt;&lt;A href="http://www.ecma-international.org/publications/files/ecma-st/ECMA-262.pdf" mce_href="http://www.ecma-international.org/publications/files/ecma-st/ECMA-262.pdf"&gt;&lt;FONT face=Calibri color=#0000ff size=3&gt;ECMAScript Language Specification 3rd Edition&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt;. We have identified the &lt;/FONT&gt;&lt;A href="http://wiki.ecmascript.org/lib/exe/fetch.php?id=resources%3Aresources&amp;amp;cache=cache&amp;amp;media=resources:jscriptdeviationsfromes3.pdf" mce_href="http://wiki.ecmascript.org/lib/exe/fetch.php?id=resources%3Aresources&amp;amp;cache=cache&amp;amp;media=resources:jscriptdeviationsfromes3.pdf"&gt;&lt;FONT face=Calibri color=#0000ff size=3&gt;JScript Deviations from ES3&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt; (discussed in detail in this blog &lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/jscript/archive/2007/10/29/ecmascript-3-and-beyond.aspx" mce_href="http://blogs.msdn.com/jscript/archive/2007/10/29/ecmascript-3-and-beyond.aspx"&gt;&lt;FONT face=Calibri color=#0000ff size=3&gt;post&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt;). &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;This document will act as a starting point for the developers targeting cross browser web applications and helps in understanding the deviations in detail. In the near future, we intend to make JScript more compatible with ES3 specifications. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; TEXT-ALIGN: justify"&gt;&lt;FONT face=Calibri size=3&gt;Another challenge for the JScript developers is the &lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/jscript/archive/2007/05/01/legacy-ie-jscript-circular-memory-leak-problem.aspx" mce_href="http://blogs.msdn.com/jscript/archive/2007/05/01/legacy-ie-jscript-circular-memory-leak-problem.aspx"&gt;&lt;FONT face=Calibri color=#0000ff size=3&gt;circular memory leak problem&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt;. We took a hard look at this problem and realized that this has to be fixed at the COM infrastructure. We implemented a design that bridges the gap between COM ref-counting and automatic garbage collection models. We extended the IDispatchEx interface to enable COM clients to simultaneously live in both the ref-counted and garbage collected worlds. The good news is that since this is impacting the underlying core infrastructure, many built-in COM components including IE8 DOM and custom COM components can take advantage of this.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; TEXT-ALIGN: justify"&gt;&lt;FONT face=Calibri size=3&gt;If you are a web developer, you would have certainly used Firebug or Visual Studio for debugging web applications. Web developers can get started with &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/express/vwd/Default.aspx" mce_href="http://www.microsoft.com/express/vwd/Default.aspx"&gt;&lt;FONT face=Calibri color=#0000ff size=3&gt;Visual Web Developer Express&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt; for basic debugging or can leverage the power of &lt;/FONT&gt;&lt;A href="http://msdn2.microsoft.com/en-us/vsts2008/default.aspx" mce_href="http://msdn2.microsoft.com/en-us/vsts2008/default.aspx"&gt;&lt;FONT face=Calibri color=#0000ff size=3&gt;Visual Studio Team System&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt; which is meant for complex testing and debugging scenarios. While we cover the whole spectrum through the Visual Studio family, one of the experiences lacking in Internet Explorer is a built-in JScript debugger. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;The IE8 Developer Tools now offer an integrated JScript debugger that provides the basic set of debugging features. We believe this compliments Visual Studio debugging experience and is an important step towards making JavaScript developers more productive. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;We look forward to hearing about your experiences with JScript and IE8 Beta 1 for Developers.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Shreesh Dubey, Product Unit Manager, JScript&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8054964" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jscript/archive/tags/Javascript/default.aspx">Javascript</category><category domain="http://blogs.msdn.com/jscript/archive/tags/Jscript/default.aspx">Jscript</category><category domain="http://blogs.msdn.com/jscript/archive/tags/IE/default.aspx">IE</category><category domain="http://blogs.msdn.com/jscript/archive/tags/MIX08/default.aspx">MIX08</category><category domain="http://blogs.msdn.com/jscript/archive/tags/Developers/default.aspx">Developers</category></item><item><title>Performance issues with "String Concatenation" in JScript.</title><link>http://blogs.msdn.com/jscript/archive/2007/10/17/performance-issues-with-string-concatenation-in-jscript.aspx</link><pubDate>Wed, 17 Oct 2007 15:28:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5490933</guid><dc:creator>shivaram.p</dc:creator><slash:comments>32</slash:comments><comments>http://blogs.msdn.com/jscript/comments/5490933.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jscript/commentrss.aspx?PostID=5490933</wfw:commentRss><wfw:comment>http://blogs.msdn.com/jscript/rsscomments.aspx?PostID=5490933</wfw:comment><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Hello Friends, &lt;BR&gt;I am Jaiprakash and work as a Developer in the Jscript team. There is not much to tell about me except one fact - I can’t recall the last time when any of my teammates called me by my name, they just call me JP&lt;/FONT&gt;&lt;SPAN style="FONT-FAMILY: Wingdings; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-char-type: symbol; mso-symbol-font-family: Wingdings"&gt;&lt;SPAN style="mso-char-type: symbol; mso-symbol-font-family: Wingdings"&gt;J&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&lt;/SPAN&gt;I know, you have seen pretty cool blogs in past from my team mates and I promise this one also not going to disappoint you. So coming to the point, I am going to talk about the &lt;/FONT&gt;&lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/ericlippert/archive/2003/10/20/53248.aspx"&gt;&lt;FONT face=Calibri color=#800080 size=3&gt;famous ‘string append&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;’ problem in Internet Explorer (or Jscript to be more accurate) and how are we going to &lt;B style="mso-bidi-font-weight: normal"&gt;fix &lt;/B&gt;it. &lt;B style="mso-bidi-font-weight: normal"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;The Problem&lt;BR&gt;&lt;/B&gt;let’s do a small experiment to get to it. Copy paste following code in an html file and run in Internet Explorer. Observe the time reported.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal"&gt;&lt;SPAN style="COLOR: #7030a0; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"&gt;&lt;FONT size=3&gt;&amp;lt;script language="javascript"&amp;gt;&lt;BR&gt;var before = new Date().getTime();&lt;BR&gt;var s = "jscript";&lt;BR&gt;x = "";&lt;BR&gt;count = 20000;&lt;BR&gt;for (var i = 0; i &amp;lt; count; i++) {&lt;BR&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;x += s;&lt;BR&gt;}&lt;BR&gt;var after = new Date().getTime();&lt;BR&gt;var time = after - before;&lt;BR&gt;alert("Time taken to append 'jscript' " + count + " times : " + time + " ms");&lt;BR&gt;&amp;lt;/script&amp;gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;On my machine the time reported is 1922 ms (averaged out three times). As you see this code is doing nothing other than appending a 7 character string 20K times. And for such a trivial operation it is consuming almost 2 seconds. Phewww….&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;Impressed? Not yet. It still doesn’t appeal you? OK. Try increasing the no of appends and enjoy the show. Here is what I get on my box…&lt;/FONT&gt;&lt;/P&gt;
&lt;TABLE class=MsoTableGrid style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN: auto auto auto 63.9pt; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid black .5pt; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-border-themecolor: text1" cellSpacing=0 cellPadding=0 border=1 class="MsoTableGrid"&gt;
&lt;TBODY&gt;
&lt;TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes"&gt;
&lt;TD class="" style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #d9d9d9; PADDING-BOTTOM: 0in; BORDER-LEFT: black 1pt solid; WIDTH: 50.1pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-background-themecolor: background1; mso-background-themeshade: 217" vAlign=top width=67&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Appends&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #d9d9d9; PADDING-BOTTOM: 0in; BORDER-LEFT: #d4d0c8; WIDTH: 66.9pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; mso-border-alt: solid black .5pt; mso-border-left-alt: solid black .5pt; mso-border-themecolor: text1; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-border-left-themecolor: text1" vAlign=top width=89&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Time (ms)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 1"&gt;
&lt;TD class="" style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: black 1pt solid; WIDTH: 50.1pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-top-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-top-themecolor: text1" vAlign=top width=67&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;FONT face=Calibri size=3&gt;10K&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #d4d0c8; WIDTH: 66.9pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-left-alt: solid black .5pt; mso-border-top-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-themecolor: text1; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1" vAlign=top width=89&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;FONT face=Calibri size=3&gt;260&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 2"&gt;
&lt;TD class="" style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: black 1pt solid; WIDTH: 50.1pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-top-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-top-themecolor: text1" vAlign=top width=67&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;FONT face=Calibri size=3&gt;20K&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #d4d0c8; WIDTH: 66.9pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-left-alt: solid black .5pt; mso-border-top-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-themecolor: text1; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1" vAlign=top width=89&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;FONT face=Calibri size=3&gt;1922&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 3"&gt;
&lt;TD class="" style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: black 1pt solid; WIDTH: 50.1pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-top-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-top-themecolor: text1" vAlign=top width=67&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;FONT face=Calibri size=3&gt;25K&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #d4d0c8; WIDTH: 66.9pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-left-alt: solid black .5pt; mso-border-top-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-themecolor: text1; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1" vAlign=top width=89&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;FONT face=Calibri size=3&gt;6125&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 4; mso-yfti-lastrow: yes"&gt;
&lt;TD class="" style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: black 1pt solid; WIDTH: 50.1pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-top-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-top-themecolor: text1" vAlign=top width=67&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;FONT face=Calibri size=3&gt;30K&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #d4d0c8; WIDTH: 66.9pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-left-alt: solid black .5pt; mso-border-top-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-themecolor: text1; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1" vAlign=top width=89&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;FONT face=Calibri size=3&gt;11578&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;BR&gt;&lt;FONT face=Calibri size=3&gt;Well, I am sure you would be impressed by now. And I can feel your curiosity to know how Jscript makes such a trivial looking operation such a big one. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Not much, it uses a very trivial algorithm to append strings to get you to such a great show.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Whenever it has to append two strings of size &lt;I style="mso-bidi-font-style: normal"&gt;‘m’&lt;/I&gt; and &lt;I style="mso-bidi-font-style: normal"&gt;‘n’&lt;/I&gt; each, it allocates a new buffer of size &lt;I style="mso-bidi-font-style: normal"&gt;(m + n)&lt;/I&gt;, copies the strings one by one, and returns this buffer back. Hmmm. This logic looks fine. What’s the deal then? &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Let’s say you want to append 3 strings like following...&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="COLOR: #7030a0; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"&gt;&lt;FONT size=3&gt;resultStr = “Jscript” + “String” + “Append”;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;To give you the final result, Jscript first appends &lt;SPAN style="COLOR: #7030a0"&gt;“Jscript”&lt;/SPAN&gt; and &lt;SPAN style="COLOR: #7030a0"&gt;“String”.&lt;/SPAN&gt; It allocates a buffer of size 13, copies them one by one to the buffer and assigns the buffer to a temporary, let’s say temp1. Next it appends temp1 and &lt;SPAN style="COLOR: #7030a0"&gt;“Append”&lt;/SPAN&gt;, allocates a buffer of size 19, copies temp1 and &lt;SPAN style="COLOR: #7030a0"&gt;“Append”&lt;/SPAN&gt;, and assigns the result to resultStr.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;As you see, to generate final string for you it copied &lt;SPAN style="COLOR: #7030a0"&gt;“Jscript”&lt;/SPAN&gt; and &lt;SPAN style="COLOR: #7030a0"&gt;“String”&lt;/SPAN&gt; twice (temp1 and resultStr) and allocated one intermediate buffer. Imagine what happens when you append ‘n’ such strings. It will allocate n-1 buffers, copy each string (n-i) times where ‘i’ is the index at which the string appeared in the operation.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;You might be thinking why Jscript was shipped with such an algorithm. Well, Jscript was meant to be used just as glue, not as full-fledge programming language as used in modern WebApps.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;How it affects Real world Scenarios&lt;BR&gt;&lt;/B&gt;Gone are the days when web apps used to be static text which was just retrieved from the server and displayed in your browser. Today’s world is AJAX, involves lot more interaction with server, and data received is not just the plain HTML. A modern WebApp fetches data from server; builds the page on your machine using Jscript and DOM APIs, and displays on your browser. And to build the page it has to generate HTML, which is nothing but text. And to generate HTML out of the pieces retrieved from server, it has to append them as strings. And as the applications are becoming smarter and smarter, they tend to minimize the interaction with server, and do as much processing as possible in your browser. &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Let me give you some real world examples. You all must have used some or the other AJAX mail client like msn.com, outlook web access or yahoo mail beta. In your inbox, if you scroll down or up, they just update your mail list not the entire page. How it happens? It gets the information about mails from server, builds the table of your mails on the fly and displays in the browser. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Another good example would be &lt;/FONT&gt;&lt;A href="http://www.redfin.com/"&gt;&lt;FONT face=Calibri size=3&gt;Redfin&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt; which is actually AJAX based real estate portal. If you search a locality, it shows a map with location of all the results and below the map it shows details of each result. This table it constructs by appending several hundreds of strings.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;These are just two. There are many more such. Basically what I want to convey is that string append is a pretty common and basic operation and probability is very high that large number of web apps get affected by this.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;So we are fixing it!!!&lt;BR&gt;&lt;/B&gt;We are trying an algorithm which avoids those intermediate buffer allocations and repeated copy operations. With this algorithm, I just ran the same test case and here are the numbers for you. Please note that the fix is still under progress so these numbers might change a bit here and there, however they should be enough to give you an idea of improvements.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;TABLE class=MsoTableGrid style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN: auto auto auto 63.9pt; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid black .5pt; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-border-themecolor: text1" cellSpacing=0 cellPadding=0 border=1 class="MsoTableGrid"&gt;
&lt;TBODY&gt;
&lt;TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes"&gt;
&lt;TD class="" style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #d9d9d9; PADDING-BOTTOM: 0in; BORDER-LEFT: black 1pt solid; WIDTH: 69.65pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-background-themecolor: background1; mso-background-themeshade: 217" vAlign=top width=93&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Appends&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #d9d9d9; PADDING-BOTTOM: 0in; BORDER-LEFT: #d4d0c8; WIDTH: 66.9pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; mso-border-alt: solid black .5pt; mso-border-left-alt: solid black .5pt; mso-border-themecolor: text1; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-border-left-themecolor: text1" vAlign=top width=89&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Time (ms)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 1"&gt;
&lt;TD class="" style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: black 1pt solid; WIDTH: 69.65pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-top-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-top-themecolor: text1" vAlign=top width=93&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;FONT face=Calibri size=3&gt;10K&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #d4d0c8; WIDTH: 66.9pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-left-alt: solid black .5pt; mso-border-top-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-themecolor: text1; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1" vAlign=top width=89&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;FONT face=Calibri size=3&gt;23&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 2"&gt;
&lt;TD class="" style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: black 1pt solid; WIDTH: 69.65pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-top-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-top-themecolor: text1" vAlign=top width=93&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;FONT face=Calibri size=3&gt;20K&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #d4d0c8; WIDTH: 66.9pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-left-alt: solid black .5pt; mso-border-top-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-themecolor: text1; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1" vAlign=top width=89&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;FONT face=Calibri size=3&gt;47&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 3"&gt;
&lt;TD class="" style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: black 1pt solid; WIDTH: 69.65pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-top-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-top-themecolor: text1" vAlign=top width=93&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;FONT face=Calibri size=3&gt;25K&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #d4d0c8; WIDTH: 66.9pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-left-alt: solid black .5pt; mso-border-top-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-themecolor: text1; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1" vAlign=top width=89&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;FONT face=Calibri size=3&gt;62&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 4; mso-yfti-lastrow: yes"&gt;
&lt;TD class="" style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: black 1pt solid; WIDTH: 69.65pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-top-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-top-themecolor: text1" vAlign=top width=93&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;FONT face=Calibri size=3&gt;30K&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #d4d0c8; WIDTH: 66.9pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-left-alt: solid black .5pt; mso-border-top-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-themecolor: text1; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1" vAlign=top width=89&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;FONT face=Calibri size=3&gt;78&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Shhhh. Numbers speak for themselves&lt;/FONT&gt;&lt;SPAN style="FONT-FAMILY: Wingdings; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-char-type: symbol; mso-symbol-font-family: Wingdings"&gt;&lt;SPAN style="mso-char-type: symbol; mso-symbol-font-family: Wingdings"&gt;J&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;JP, I Need this fix on my box, now!!!&lt;BR&gt;&lt;/B&gt;I wish I could help you. You will have to wait till next release of Internet Explorer.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;At last…&lt;BR&gt;&lt;/B&gt;Please help us in helping you. If you have encountered other such script “hairballs”, do leave a note on any of the blogs published here. I want to publish more such blogs for you&lt;/FONT&gt;&lt;SPAN style="FONT-FAMILY: Wingdings; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-char-type: symbol; mso-symbol-font-family: Wingdings"&gt;&lt;SPAN style="mso-char-type: symbol; mso-symbol-font-family: Wingdings"&gt;J&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;- JP&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5490933" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jscript/archive/tags/JavaScript+Performance+IE/default.aspx">JavaScript Performance IE</category><category domain="http://blogs.msdn.com/jscript/archive/tags/JScript+Performance+IE/default.aspx">JScript Performance IE</category><category domain="http://blogs.msdn.com/jscript/archive/tags/Javascript/default.aspx">Javascript</category><category domain="http://blogs.msdn.com/jscript/archive/tags/Jscript/default.aspx">Jscript</category><category domain="http://blogs.msdn.com/jscript/archive/tags/IE/default.aspx">IE</category></item><item><title>Using Jscript based IE Add-On to export data from any website</title><link>http://blogs.msdn.com/jscript/archive/2007/07/23/using-jscript-based-ie-add-on-to-export-data-from-any-website.aspx</link><pubDate>Mon, 23 Jul 2007 07:31:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4005852</guid><dc:creator>rajesh.bhutani@microsoft.com</dc:creator><slash:comments>7</slash:comments><comments>http://blogs.msdn.com/jscript/comments/4005852.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jscript/commentrss.aspx?PostID=4005852</wfw:commentRss><wfw:comment>http://blogs.msdn.com/jscript/rsscomments.aspx?PostID=4005852</wfw:comment><description>&lt;P&gt;Often times we browse to a website which has lot of data in tabular format, or we login to secure website which displays data like financial transactions etc. in a neatly formated tabular format. Sometimes we have a need to export such data into another tool, if the website supports such an export good, otherwise we have to manually cut and paste the data into a text file, and painfully convert it into the desired format of the target tool. This process can be very lengthy, painful and error prone. We can use some kind of a script to try to automate some part of&amp;nbsp;this process&amp;nbsp;specially the post processing of the cut-and-pasted data to get into the desired format. But the final process is still not completely automated and has lots of manual steps involved.&lt;/P&gt;
&lt;P&gt;What if we can easily write an add-on for the browser which can, not only extract the right set of data from a website we are browsing but can also easily convert it into any format we desire.&amp;nbsp;In this blog post I will give step-by-step instruction on how to develop a Jscript based IE Add-On to achieve exactly such a solution.&lt;/P&gt;
&lt;P&gt;In this example we will use an online stocks and mutual funds trading&amp;nbsp;website &lt;A href="http://www.icicidirect.com/" mce_href="http://www.icicidirect.com/"&gt;www.icicidirect.com&lt;/A&gt; and&amp;nbsp;write an IE&amp;nbsp;add-on to extract trade transaction details from it, and then to&amp;nbsp;export it in QIF format so that it can be imported into personal finance tools like Microsoft Money.&lt;/P&gt;
&lt;P&gt;There are&amp;nbsp; four major requirements for this add-on:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;We should be able to invoke it from IE while browsing a web page and it should be allowed to access the contents of that web page.&lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;It should be able to traverse the contents of the web page easily and locate the fields which are of interest.&lt;/LI&gt;
&lt;LI&gt;It should be able to easily convert the data in the desired output format.&lt;/LI&gt;
&lt;LI&gt;And finally it should be able to write the data at the desired location on user machine.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;For the first requirement i.e. attaching it to IE, we will make use of the "&lt;A href="http://msdn2.microsoft.com/en-us/library/aa753589.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/aa753589.aspx"&gt;Adding Entries to the Standard Context Menu&lt;/A&gt;" facility in IE. There are many different ways to extend functionality in IE but this one is one of the simpler ones and it satisfies our requirement perfectly. Only thing we need to do for this is to run the following command:&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=style4&gt;REG ADD "HKCU\Software\Microsoft\Internet Explorer\MenuExt\icicidirect2qif" /ve /d "file://C:\Program Files\EXTENDIE\&lt;/SPAN&gt;&lt;SPAN class=style4&gt;icicidirect2qif&lt;/SPAN&gt;&lt;SPAN class=style4&gt;.htm"&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;What this does is add registry entry for IE to start showing 'icicidirect2qif' as an item in the context menu which shows up anytime you right click in a web page. And when you click on that item IE will run the file "C:\Program Files\EXTENDIE\icicidirect2qif.htm" in context of that web page. The file icicidirect2qif.htm can contain Jscript code written inside the tags &amp;lt;SCRIPT&amp;gt;...&amp;lt;/SCRIPT&amp;gt; e.g.&lt;/P&gt;
&lt;P&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; ...&lt;/P&gt;
&lt;P&gt;&amp;lt;/script&amp;gt;&lt;/P&gt;
&lt;P&gt;For the second requirement, when IE calls into icicidirect2qif.htm, the script code inside this page can use DOM element "external.menuArguments.document" to access any and all the contents of the web page currently being browsed in IE. In your Jscript code you can use one or more of the &lt;A href="http://msdn2.microsoft.com/en-us/library/ms535862.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/ms535862.aspx"&gt;properties or methods available in IE to traverse through the 'document' object&lt;/A&gt;. Our target web page in icicidirect site had named &amp;lt;text&amp;gt; fields containing the transaction details like 'date', 'amount', 'mutual fund name', 'price' etc. so we have used the DOM call "&lt;A href="http://msdn2.microsoft.com/en-us/library/ms536438.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/ms536438.aspx"&gt;getElementsByName&lt;/A&gt;" to locate and get data for the fields we are interested in, for example "var date = doc.getElementsByName("trans_date"+i)[0];" etc.&lt;/P&gt;
&lt;P&gt;For the third requirement, Jscript has a number of useful "String" and "Number" APIs to work with the data we have extracted out of the web page and to convert it to any target format we are interested in, for example we have used code like:&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var units = doc.getElementsByName("Trans_Units"+i)[0].value;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; units = units.replace(/,/g, "");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; amount = new Number(amount); units = new Number(units);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var price = amount/units; &lt;/P&gt;
&lt;P&gt;to automatically calculate 'price' information for a transaction given the 'amount' and 'quantity' information extracted from the web page.&lt;/P&gt;
&lt;P&gt;For the fourth and final requirement, Jscript has multiple ways to write data out, one of the simplest method is to use the 'document.write()' API to print output in the currently browsed web page itself. Alternatively you can also access the 'clipboard' object from Jscript and write output into the clipboard which can later be pasted into any application you want. We have used '&lt;A href="http://msdn2.microsoft.com/en-us/library/z9ty6h50.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/z9ty6h50.aspx"&gt;ActiveXObject("Scripting.FileSystemObject")&lt;/A&gt;' to write out our data into a file on user's machine as follows:&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var fso = new ActiveXObject("Scripting.FileSystemObject");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var FileObject = fso.OpenTextFile("d:\\export.qif",8,true,0);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileObject.WriteLine("D"+date[1]+"/"+date[0]+"/"+date[2]);&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;In fact there is another ActiveXObject &lt;A href="http://msdn2.microsoft.com/en-us/library/ms630455.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/ms630455.aspx"&gt;Shell.Application&lt;/A&gt;, which can be used in the end to automatically invoke Microsoft Money QIF import tool to start and load the QIF file we have just written out in our example we skipped this because we were writing out an 'investment' account which needs to be loaded into Money using 'File-&amp;gt;Import-&amp;gt;Restore Account' while the standard QIF import tool in Money works for the normal 'banking' account:&lt;BR&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var oShell = new ActiveXObject("Shell.Application");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; oShell.ShellExecute("d:\\export.qif");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; oShell = null;&lt;BR&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;Here is the code for the complete "icicidirect2qif.htm":&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;lt;script type="text/javascript"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var activityArray = {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "P":"Buy",&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "D":"Div",&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "DR":"ReinvDiv",&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "R":"Sell"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var doc = external.menuArguments.document;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var i = 0;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (doc.getElementsByName("trans_date"+i)[0] != null) i++;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var fso = new ActiveXObject("Scripting.FileSystemObject");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fso.DeleteFile("d:\\export.qif");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var FileObject = fso.OpenTextFile("d:\\export.qif",8,true,0);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileObject.WriteLine("!Type:Invst");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (i--) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var date = doc.getElementsByName("trans_date"+i)[0];&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; date = date.value;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; date = date.split(" ")[0];&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; date = date.split("-");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileObject.WriteLine("D"+date[1]+"/"+date[0]+"/"+date[2]);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var amount = doc.getElementsByName("Trans_Amt"+i)[0].value;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; amount = amount.replace(/,/g, "");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileObject.WriteLine("T"+amount);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var activity = doc.getElementsByName("trans_cd"+i)[0].value;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (activityArray[activity] != null) activity = activityArray[activity];&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileObject.WriteLine("N"+activity);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var fund = doc.getElementsByName("Fund_Name"+i)[0].value;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fund = fund.split(" ")[0];&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var scheme = doc.getElementsByName("Scheme_Name"+i)[0].value;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileObject.WriteLine("Y"+fund+" "+scheme);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var units = doc.getElementsByName("Trans_Units"+i)[0].value;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; units = units.replace(/,/g, "");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; amount = new Number(amount); units = new Number(units);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var price = amount/units;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileObject.WriteLine("I"+price.toFixed(6));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileObject.WriteLine("Q"+units.toString());&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (activity == "Div" || activity == "ReinvDiv") {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileObject.WriteLine("LInvestment Income:Dividends");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else if (activity == "Sell") {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileObject.WriteLine("LInvestment Income:Capital Gains");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileObject.WriteLine("^");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileObject.close();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*var oShell = new ActiveXObject("Shell.Application");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; oShell.ShellExecute("d:\\export.qif");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; oShell = null;*/&lt;BR&gt;&amp;lt;/script&amp;gt;&lt;BR&gt;&lt;BR&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4005852" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jscript/archive/tags/Javascript/default.aspx">Javascript</category><category domain="http://blogs.msdn.com/jscript/archive/tags/Jscript/default.aspx">Jscript</category><category domain="http://blogs.msdn.com/jscript/archive/tags/IE/default.aspx">IE</category><category domain="http://blogs.msdn.com/jscript/archive/tags/Finance/default.aspx">Finance</category><category domain="http://blogs.msdn.com/jscript/archive/tags/Microsoft+Money/default.aspx">Microsoft Money</category></item></channel></rss>