<?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>The Townes &#187; 为什么</title>
	<atom:link href="https://thetownes.coolpage.biz/?feed=rss2&#038;tag=%E4%B8%BA%E4%BB%80%E4%B9%88" rel="self" type="application/rss+xml" />
	<link>https://thetownes.coolpage.biz</link>
	<description>本站已转移至：http://www.thetownes.info</description>
	<lastBuildDate>Thu, 01 Aug 2013 11:49:56 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.2</generator>
		<item>
		<title>为什么 ++[[]][+[]]+[+[]] = 10 ？</title>
		<link>https://thetownes.coolpage.biz/?p=377</link>
		<comments>https://thetownes.coolpage.biz/?p=377#comments</comments>
		<pubDate>Sat, 13 Jul 2013 14:55:42 +0000</pubDate>
		<dc:creator>Will</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[++[[]][+[]]+[+[]]]]></category>
		<category><![CDATA[为什么]]></category>

		<guid isPermaLink="false">http://thetownes.coolpage.biz/?p=377</guid>
		<description><![CDATA[首先，问这个问题的人是个天才，他怎么会遇到这样的一个问题。其次，回答这个问题的人 &#8230; <a href="https://thetownes.coolpage.biz/?p=377">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>首先，问这个问题的人是个天才，他怎么会遇到这样的一个问题。其次，回答这个问题的人更是一个天才，我难以想象他会回答这个问题，更难以想象的是，他的回答是如此的详细和丰富和完整，真正称得上诲人不倦。</p>
<p>既然遇到了这个问题，我们不妨也跟着提高一下。</p>
<p>这是一个Javascript语言题目，一个完全有效的等式，不信自己可以试一下，下面看看高人的题解：</p>
<p>++[[]][+[]]+[+[]]</p>
<p>&nbsp;</p>
<p>如果把这段表达式拆分开来，它相等于：</p>
<p>++[[]][+[]]</p>
<p>+</p>
<p>[+[]]</p>
<p>&nbsp;</p>
<p>在JavaScript里，+[] === 0 是完全正确的。 + 会把一些字符转化成数字，在这里，这个式子会变成 +”” 或 0。</p>
<p>因此，我们可以简化一下(++ 比 + 有更高的优先级)：</p>
<p>++[[]][0]</p>
<p>+</p>
<p>[0]</p>
<p>&nbsp;</p>
<p>因为 [[]][0] 的意思是：获取 [[]] 的第一个元素，这就得出了下面的结果：</p>
<p>[[]][0] 返回内部数组 ([])。根据语言规范，我们说 [[]][0] === [] 是不正确的，但让我们把这个内部数组称作 A，以避免错误的写法。</p>
<p>++[[]][0] == A + 1， 因为 ++ 的意思是“加一”。</p>
<p>++[[]][0] === +(A + 1);换句话说，你得到的永远是个数值( +1 并不一定得到的是个数值，但 ++ 一定是)。</p>
<p>同样，我们可以把这一堆代码简化的更清晰。让我们把 A 换回成 [] :</p>
<p>+([] + 1)</p>
<p>+</p>
<p>[0]</p>
<p>&nbsp;</p>
<p>在JavaScript里，这也是正确的：[] + 1 === “1″，因为 [] == “” (这相当于一个空的数组的内部元素连接)，于是：</p>
<p>+([] + 1) === +(“” + 1)，并且</p>
<p>+(“” + 1) === +(“1″)，并且</p>
<p>+(“1″) === 1</p>
<p>让我们再次简化一下：</p>
<p>1</p>
<p>+</p>
<p>[0]</p>
<p>&nbsp;</p>
<p>同样，在Javascript里，这是正确的：[0] == “0″，因为这是相当于一个有一个元素的数组的内部元素的连接。各元素会使用，分隔。当只有一个元素时，你可以推论出这个过程的结果就是它自身的第一个元素。</p>
<p>所以，最终我们得到(数字 + 字符串 = 字符串)：</p>
<p>1</p>
<p>+</p>
<p>“0″</p>
<p>=== “10″ // 耶!</p>
<p>&lt;<br />
(转发请注明转自:<a href="http://www.xuephp.com/main/detail.php?cid=18161">学PHP</a>)</p>
]]></content:encoded>
			<wfw:commentRss>https://thetownes.coolpage.biz/?feed=rss2&#038;p=377</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
