<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>func09 &#187; javascript</title>
	<atom:link href="http://www.func09.com/wordpress/archives/tag/javascript/feed" rel="self" type="application/rss+xml" />
	<link>http://www.func09.com/wordpress</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Mon, 06 Feb 2012 04:25:55 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>JavaScriptで文字列リテラルは Stringクラスのインスタンスではない</title>
		<link>http://www.func09.com/wordpress/archives/244</link>
		<comments>http://www.func09.com/wordpress/archives/244#comments</comments>
		<pubDate>Tue, 14 Oct 2008 11:20:18 +0000</pubDate>
		<dc:creator>haga</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[日記]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/?p=244</guid>
		<description><![CDATA[最近人にプログラミングを教えるというような事があって、「オブジェクトの正体」を理解してもらおうという目的から いろんなリテラルをinstanceofにかけていました（FireFox3のFireBugで）。 [1,2,3] [...]]]></description>
			<content:encoded><![CDATA[<p>最近人にプログラミングを教えるというような事があって、「オブジェクトの正体」を理解してもらおうという目的から
いろんなリテラルをinstanceofにかけていました（FireFox3のFireBugで）。</p>

<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">[1,2,3] instanceof Object // =&gt; true<br />
{ a:0, b:1} instanceof Object // =&gt; true</div></div>

<p>こんな感じで。
しかし文字リテラルの挙動が期待と違っていました。</p>

<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&quot;a&quot; instanceof Object // =&gt; trueかと思いきやfalse<br />
&quot;a&quot; instanceof String // =&gt; trueかと思いきやfalse</div></div>

<p>ちょっと待ってほしい。
文字リテラルも文字列クラスのインスタンスですよー、なんて解説をしようと思ってたのに
これじゃぁ、文字リテラルはStringオブジェクトじゃないという事になってしまう。</p>

<p>事実として</p>

<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&quot;hoge&quot;.sub(&quot;o&quot;,&quot;a&quot;) // =&gt; &quot;hage&quot;</div></div>

<p>というコードが実行できるのだから、文字列リテラルがStringオブジェクトじゃないと話が合わない。だってsubメソッドはStringのインスタンスメソッドじゃないか！</p>

<h2>結論</h2>

<p>答えはここにありました。</p>

<p><a href="http://developer.mozilla.org/ja/Core_JavaScript_1.5_Guide/Literals#.e6.96.87.e5.ad.97.e5.88.97.e3.83.aa.e3.83.86.e3.83.a9.e3.83.ab">Literals &#8211; MDC（文字列リテラル）</a></p>

<p><a href="http://developer.mozilla.org/ja/Core_JavaScript_1.5_Guide/Predefined_Core_Objects/String_Object#.e6.96.87.e5.ad.97.e5.88.97.e3.83.aa.e3.83.86.e3.83.a9.e3.83.ab.e3.81.af_String_.e3.82.aa.e3.83.96.e3.82.b8.e3.82.a7.e3.82.af.e3.83.88.e3.81.a8.e3.81.af.e5.88.a5.e7.89.a9">String Object &#8211; MDC #文字列リテラルは String オブジェクトとは別物 </a></p>

<blockquote>
  <p>文字列リテラルの値でなら、String オブジェクトのどんなメソッドでも呼び出すことができます。JavaScript が自動的に文字列リテラルを一時的な String オブジェクトに変換し、メソッドを呼び出し、その一時的な String オブジェクトを破棄するのです。String.length プロパティを文字列リテラルで使うこともできます。</p>
</blockquote>

<p>という事なんですって。</p>

<p>つまり、文字列リテラルの状態では確かにStringのインスタンスではないけれど、メソッドを呼び出す時はJavaScriptがStringオブジェクトに変換していると。なるほど。</p>

<p>ちなみにこのエントリーの内容はMozilla FireFoxでしか試していませんし、Mozillaのサイトでしか結論を見つけていませんので、他のブラウザでどうなのかは一切調べてませんので悪しからず。誰か暇な人は調べてトラバください。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/244/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

