<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Komentarze do: Falsy values i operatory porównania</title>
	<atom:link href="http://ferrante.pl/2009/09/05/falsy-values-i-operatory-porownania/feed/" rel="self" type="application/rss+xml" />
	<link>http://ferrante.pl/2009/09/05/falsy-values-i-operatory-porownania/</link>
	<description>Technologie internetowe, PHP5, Python, Javascript. Publicystyka i kursy w najlepszym wydaniu.</description>
	<lastBuildDate>Thu, 29 Jul 2010 05:00:36 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>Autor: Piotr Dobrogost</title>
		<link>http://ferrante.pl/2009/09/05/falsy-values-i-operatory-porownania/comment-page-1/#comment-9676</link>
		<dc:creator>Piotr Dobrogost</dc:creator>
		<pubDate>Wed, 07 Jul 2010 21:18:26 +0000</pubDate>
		<guid isPermaLink="false">http://ferrante.pl/?p=596#comment-9676</guid>
		<description>&lt;blockquote&gt;Wystarczy w zasadzie zapamiętać, że jeśli dokładnie jeden z operandów jest obiektem to przy operatorze == zostanie sprowadzony do wartości prymitywnej.
Dlatego &lt;code&gt;[] == 0, [] == &quot;&quot;&lt;/code&gt;&lt;/blockquote&gt;
Do jakiej wartości prymitywnej jest zatem sprowadzana pusta tablica? Czy można w kodzie sprawdzić do jakiej wartości prymitywnej jest sprowadzany dowolny obiekt?</description>
		<content:encoded><![CDATA[<blockquote><p>Wystarczy w zasadzie zapamiętać, że jeśli dokładnie jeden z operandów jest obiektem to przy operatorze == zostanie sprowadzony do wartości prymitywnej.<br />
Dlatego <code>[] == 0, [] == ""</code></p></blockquote>
<p>Do jakiej wartości prymitywnej jest zatem sprowadzana pusta tablica? Czy można w kodzie sprawdzić do jakiej wartości prymitywnej jest sprowadzany dowolny obiekt?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: Ile tu jest błędów &#8211; rozwiązanie</title>
		<link>http://ferrante.pl/2009/09/05/falsy-values-i-operatory-porownania/comment-page-1/#comment-9303</link>
		<dc:creator>Ile tu jest błędów &#8211; rozwiązanie</dc:creator>
		<pubDate>Wed, 25 Nov 2009 22:58:50 +0000</pubDate>
		<guid isPermaLink="false">http://ferrante.pl/?p=596#comment-9303</guid>
		<description>[...] do analizy tej linii mamy prosty warunek. Jako że NaN to jedna z falsy values i przy skonwertowaniu do wartości logicznej da false, JS spróbuje wziąć sobie zmienną foobar i [...]</description>
		<content:encoded><![CDATA[<p>[...] do analizy tej linii mamy prosty warunek. Jako że NaN to jedna z falsy values i przy skonwertowaniu do wartości logicznej da false, JS spróbuje wziąć sobie zmienną foobar i [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: pakalk</title>
		<link>http://ferrante.pl/2009/09/05/falsy-values-i-operatory-porownania/comment-page-1/#comment-9286</link>
		<dc:creator>pakalk</dc:creator>
		<pubDate>Sun, 15 Nov 2009 16:51:55 +0000</pubDate>
		<guid isPermaLink="false">http://ferrante.pl/?p=596#comment-9286</guid>
		<description>

if ( 0 == false ) document.write( &#039;0 == false&#039; ); else document.write( &#039;0 != false&#039; );
document.write(&#039;&#039;);
if ( null == false ) document.write( &#039;null == false&#039; ); else document.write( &#039;false != null&#039; );
document.write(&#039;&#039;);
if ( 0 == null ) document.write( &#039;0 == null&#039; ); else document.write( &#039;0 != null&#039; );
document.write(&#039;&#039;);

if ( null )
{
	document.write( &#039;null is true&#039; );
}
else
{
	document.write( &#039;null is not true&#039; );	
}

document.write(&#039;&#039;);
if ( null == true )
{
	document.write( &#039;null is true&#039; );
}
else
{
	document.write( &#039;null is not true&#039; );	
}

document.write(&#039;&#039;);
if ( null == false )
{
	document.write( &#039;null is false&#039; );
}
else
{
	document.write( &#039;null is not false&#039; );	
}



0 == false
false != null
0 != null
null is not true
null is not true
null is not false

Strasznie nielogiczne. Po to jest === zeby dostac ( null === false ) != true...</description>
		<content:encoded><![CDATA[<p>if ( 0 == false ) document.write( &#8216;0 == false&#8217; ); else document.write( &#8216;0 != false&#8217; );<br />
document.write(&#8221;);<br />
if ( null == false ) document.write( &#8216;null == false&#8217; ); else document.write( &#8216;false != null&#8217; );<br />
document.write(&#8221;);<br />
if ( 0 == null ) document.write( &#8216;0 == null&#8217; ); else document.write( &#8216;0 != null&#8217; );<br />
document.write(&#8221;);</p>
<p>if ( null )<br />
{<br />
	document.write( &#8216;null is true&#8217; );<br />
}<br />
else<br />
{<br />
	document.write( &#8216;null is not true&#8217; );<br />
}</p>
<p>document.write(&#8221;);<br />
if ( null == true )<br />
{<br />
	document.write( &#8216;null is true&#8217; );<br />
}<br />
else<br />
{<br />
	document.write( &#8216;null is not true&#8217; );<br />
}</p>
<p>document.write(&#8221;);<br />
if ( null == false )<br />
{<br />
	document.write( &#8216;null is false&#8217; );<br />
}<br />
else<br />
{<br />
	document.write( &#8216;null is not false&#8217; );<br />
}</p>
<p>0 == false<br />
false != null<br />
0 != null<br />
null is not true<br />
null is not true<br />
null is not false</p>
<p>Strasznie nielogiczne. Po to jest === zeby dostac ( null === false ) != true&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: Kamil T.</title>
		<link>http://ferrante.pl/2009/09/05/falsy-values-i-operatory-porownania/comment-page-1/#comment-9284</link>
		<dc:creator>Kamil T.</dc:creator>
		<pubDate>Mon, 09 Nov 2009 21:08:44 +0000</pubDate>
		<guid isPermaLink="false">http://ferrante.pl/?p=596#comment-9284</guid>
		<description>Marek podał idealne rozwiązanie problemu i jedyny sposób, by nie zaprzątać sobie tym wszystkim głowy - wystarczy wyrzucić z głowy te dwa operatory &#039;==&#039; oraz &#039;!=&#039; i używać ich bardziej precyzyjnych odpowiedników, czyli &#039;===&#039; oraz &#039;!==&#039; - robię tak od ponad roku (od kiedy na porządku dziennym używam JS Lint) i w żaden sposób mi ich nie brakuje.</description>
		<content:encoded><![CDATA[<p>Marek podał idealne rozwiązanie problemu i jedyny sposób, by nie zaprzątać sobie tym wszystkim głowy &#8211; wystarczy wyrzucić z głowy te dwa operatory &#8216;==&#8217; oraz &#8216;!=&#8217; i używać ich bardziej precyzyjnych odpowiedników, czyli &#8216;===&#8217; oraz &#8216;!==&#8217; &#8211; robię tak od ponad roku (od kiedy na porządku dziennym używam JS Lint) i w żaden sposób mi ich nie brakuje.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: Marek</title>
		<link>http://ferrante.pl/2009/09/05/falsy-values-i-operatory-porownania/comment-page-1/#comment-9276</link>
		<dc:creator>Marek</dc:creator>
		<pubDate>Tue, 20 Oct 2009 13:06:13 +0000</pubDate>
		<guid isPermaLink="false">http://ferrante.pl/?p=596#comment-9276</guid>
		<description>a po co zawracać sobie głowę ==, != ?</description>
		<content:encoded><![CDATA[<p>a po co zawracać sobie głowę ==, != ?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: ferrante</title>
		<link>http://ferrante.pl/2009/09/05/falsy-values-i-operatory-porownania/comment-page-1/#comment-9248</link>
		<dc:creator>ferrante</dc:creator>
		<pubDate>Mon, 14 Sep 2009 17:06:05 +0000</pubDate>
		<guid isPermaLink="false">http://ferrante.pl/?p=596#comment-9248</guid>
		<description>Poprawione w tekscie.</description>
		<content:encoded><![CDATA[<p>Poprawione w tekscie.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: cx</title>
		<link>http://ferrante.pl/2009/09/05/falsy-values-i-operatory-porownania/comment-page-1/#comment-9247</link>
		<dc:creator>cx</dc:creator>
		<pubDate>Mon, 14 Sep 2009 16:17:29 +0000</pubDate>
		<guid isPermaLink="false">http://ferrante.pl/?p=596#comment-9247</guid>
		<description>Dlaczego nie mam racji? Przeciez
!null == true
a nie false, a jest napisane &quot;Wszystkie te wartości dają false. &quot;</description>
		<content:encoded><![CDATA[<p>Dlaczego nie mam racji? Przeciez<br />
!null == true<br />
a nie false, a jest napisane &#8220;Wszystkie te wartości dają false. &#8220;</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: Nowaker</title>
		<link>http://ferrante.pl/2009/09/05/falsy-values-i-operatory-porownania/comment-page-1/#comment-9241</link>
		<dc:creator>Nowaker</dc:creator>
		<pubDate>Thu, 10 Sep 2009 19:42:42 +0000</pubDate>
		<guid isPermaLink="false">http://ferrante.pl/?p=596#comment-9241</guid>
		<description>@Rafał, chodzi właśnie o to, by nie czytać żadnej specyfikacji. Aczkolwiek niżej podałeś ludzkie reguły rządzące tymi porównaniami.</description>
		<content:encoded><![CDATA[<p>@Rafał, chodzi właśnie o to, by nie czytać żadnej specyfikacji. Aczkolwiek niżej podałeś ludzkie reguły rządzące tymi porównaniami.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: Rafał Kukawski</title>
		<link>http://ferrante.pl/2009/09/05/falsy-values-i-operatory-porownania/comment-page-1/#comment-9240</link>
		<dc:creator>Rafał Kukawski</dc:creator>
		<pubDate>Thu, 10 Sep 2009 14:21:51 +0000</pubDate>
		<guid isPermaLink="false">http://ferrante.pl/?p=596#comment-9240</guid>
		<description>Odnosząc się do szóstego komentarza autorstwa Nowakera.

Zgadzam się, że działanie operatorów porównań nie jest łatwe do odgadnięcia &quot;na logikę&quot; na samym początku, ale po przeczytaniu specyfikacji wszystko staje się jasne.
Wystarczy w zasadzie zapamiętać, że jeśli dokładnie jeden z operandów jest obiektem to przy operatorze == zostanie sprowadzony do wartości prymitywnej.
Dlatego [] == 0, [] == &quot;&quot;, [0] == 0, nawet &quot;[object Object]&quot; == {} zwrócą true.
Dopiero wartości prymitywne są ze sobą porównane.
Gdy obydwa operandy są obiektami, to porównywane są referencje.

Jeśli porównujemy String z liczbą / liczbę ze Stringiem, zawsze String zostanie sprowadzony do wartości liczbowej. W ten sposób prawdę zwrócą &quot;1e1&quot; == 10, 10 == &quot;1e1&quot;

W przypadku, gdy jednym z operandów jest wartość logiczna (true/false), operand ten będzie sprowadzony do liczby i dopiero porównany z drugim, dlatego prawdą będzie:
true == 1
true == &quot;1&quot;
false == 0
false == &quot;0&quot;
false == [0]

mam nadzieję, że nic nie pokręciłem ;-)</description>
		<content:encoded><![CDATA[<p>Odnosząc się do szóstego komentarza autorstwa Nowakera.</p>
<p>Zgadzam się, że działanie operatorów porównań nie jest łatwe do odgadnięcia &#8220;na logikę&#8221; na samym początku, ale po przeczytaniu specyfikacji wszystko staje się jasne.<br />
Wystarczy w zasadzie zapamiętać, że jeśli dokładnie jeden z operandów jest obiektem to przy operatorze == zostanie sprowadzony do wartości prymitywnej.<br />
Dlatego [] == 0, [] == &#8220;&#8221;, [0] == 0, nawet &#8220;[object Object]&#8221; == {} zwrócą true.<br />
Dopiero wartości prymitywne są ze sobą porównane.<br />
Gdy obydwa operandy są obiektami, to porównywane są referencje.</p>
<p>Jeśli porównujemy String z liczbą / liczbę ze Stringiem, zawsze String zostanie sprowadzony do wartości liczbowej. W ten sposób prawdę zwrócą &#8220;1e1&#8243; == 10, 10 == &#8220;1e1&#8243;</p>
<p>W przypadku, gdy jednym z operandów jest wartość logiczna (true/false), operand ten będzie sprowadzony do liczby i dopiero porównany z drugim, dlatego prawdą będzie:<br />
true == 1<br />
true == &#8220;1&#8243;<br />
false == 0<br />
false == &#8220;0&#8243;<br />
false == [0]</p>
<p>mam nadzieję, że nic nie pokręciłem ;-)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: ferrante</title>
		<link>http://ferrante.pl/2009/09/05/falsy-values-i-operatory-porownania/comment-page-1/#comment-9236</link>
		<dc:creator>ferrante</dc:creator>
		<pubDate>Wed, 09 Sep 2009 06:37:52 +0000</pubDate>
		<guid isPermaLink="false">http://ferrante.pl/?p=596#comment-9236</guid>
		<description>Nie masz racji ;)</description>
		<content:encoded><![CDATA[<p>Nie masz racji ;)</p>
]]></content:encoded>
	</item>
</channel>
</rss>
