<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; JS: Правильная проверка существования значения массива]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=8424&amp;type=atom" />
	<updated>2013-06-25T08:15:49Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=8424</id>
		<entry>
			<title type="html"><![CDATA[Re: JS: Правильная проверка существования значения массива]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=73285#p73285" />
			<content type="html"><![CDATA[<p>Знакомый алгоритм. Посмотрел у себя - сам похожее писал тоже. Но не помню уже с какой целью - возможно прицепом с чем-то еще. Отличие - создает все объекты в глобальной области видимости. Надо бы переписать для любых случаев. </p><div class="codebox"><pre><code>
(function(that)
{
    Object.ns = function(namespace, value)
    {
        var parts = namespace.split(&#039;.&#039;);
        var name = parts.pop();
        var len = parts.length;

        var root = that;

        for (var i = 0; i &lt; len; i++) {
            var p = parts[i];
            root = root[p] = root[p] || {};
        }

        return root[name] = value;
    };

})(this);
</code></pre></div><p>Пример использования:<br /></p><div class="codebox"><pre><code>
Object.ns(&#039;a.b.c.d&#039;, Math.PI);
Object.ns(&#039;a.x.y.z&#039;, Math.PI);

/*
// The code above creates this structure
var a = {
    b: {
        c: {
            d: Math.PI
        }
    }, 
    x: {
        y: {
            z: Math.PI
        }
    }
};
*/
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2013-06-25T08:15:49Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=73285#p73285</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JS: Правильная проверка существования значения массива]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=73284#p73284" />
			<content type="html"><![CDATA[<p>Конечный результат:<br /></p><div class="codebox"><pre><code>function f (o, s) {
    s = s.split(&#039;.&#039;);
    for (i = 0; i &lt; s.length; i++) {
            o = o[s[i]] || &quot;&quot;;
        }
    return o
}
d = f (o, &quot;value.origin.title&quot;);
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[DnsIs]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26282</uri>
			</author>
			<updated>2013-06-25T08:04:54Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=73284#p73284</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JS: Правильная проверка существования значения массива]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=73283#p73283" />
			<content type="html"><![CDATA[<p>Нашел решение</p><div class="codebox"><pre><code>d = (o.value &amp;&amp; o.value.origin &amp;&amp; o.valuee.origin.title) || &quot;Пусто&quot;</code></pre></div><p>Которое позже трансформировалось в</p><div class="codebox"><pre><code>d = ((s1 = o.value) &amp;&amp; (s2 = s1.origin) &amp;&amp; (s2.title)) || &quot;Пусто&quot;</code></pre></div>]]></content>
			<author>
				<name><![CDATA[DnsIs]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26282</uri>
			</author>
			<updated>2013-06-25T05:34:00Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=73283#p73283</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JS: Правильная проверка существования значения массива]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=73263#p73263" />
			<content type="html"><![CDATA[<p>И &quot;for in&quot; и &quot;try catch&quot; пробовал, но хотелось что бы был более простой метод.</p><p>Спасибо.</p>]]></content>
			<author>
				<name><![CDATA[DnsIs]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26282</uri>
			</author>
			<updated>2013-06-24T13:33:09Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=73263#p73263</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JS: Правильная проверка существования значения массива]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=73260#p73260" />
			<content type="html"><![CDATA[<p>Можно. Но через исключение больше похоже смахивает на хак.</p>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2013-06-24T12:28:56Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=73260#p73260</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JS: Правильная проверка существования значения массива]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=73259#p73259" />
			<content type="html"><![CDATA[<p>Если понял, что надо:<br /></p><div class="codebox"><pre><code>try {
    d = o.value.origin.title;
} catch (error) {
    d = &quot;no&quot;;
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[wisgest]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=3850</uri>
			</author>
			<updated>2013-06-24T12:24:59Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=73259#p73259</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JS: Правильная проверка существования значения массива]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=73258#p73258" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>Как правильно проверить, без длинной городьбы?</p></blockquote></div><p>Не получится. Надо каждый раз проверять наличие родительского свойства в цепочке &quot;a.b.c.d&quot;. </p><p>Можно пройтись циклом &quot;for in&quot;.</p>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2013-06-24T12:24:20Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=73258#p73258</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[JS: Правильная проверка существования значения массива]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=73255#p73255" />
			<content type="html"><![CDATA[<p>Доброго утра.<br /></p><div class="codebox"><pre><code>o = {
    &quot;value&quot;: {
        &quot;origin&quot;: {
            &quot;title&quot;: &quot;Ух ты&quot;,
            &quot;htmlUrl&quot;: &quot;http://xxx.ru&quot;,
        }
    }
}
</code></pre></div><p>Проверки типа того <br /></p><div class="codebox"><pre><code>d = o.value.body.title ? o.value.body.title : &quot;oh my god&quot;
d = o.value.body.title || &quot;oh my god&quot;</code></pre></div><p>Не работают. Пока вижу только такой вариант:<br /></p><div class="codebox"><pre><code>d = o.value.origin ? o.value.origin.title ? o.value.origin.title : &quot;no&quot; : &quot;no&quot;;</code></pre></div><p>Но при большой вложенности получится очень некрасиво.<br />Как правильно проверить, без длинной городьбы?</p><p>Спасибо.</p>]]></content>
			<author>
				<name><![CDATA[DnsIs]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26282</uri>
			</author>
			<updated>2013-06-24T10:29:40Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=73255#p73255</id>
		</entry>
</feed>
