You are on page 1of 4

<!

DOCTYPE html>
<html>

<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>JS Objects</title>
<link rel="stylesheet" href="https://stackedit.io/style.css" />
</head>

<body class="stackedit">
<div class="stackedit__html"><h2 id="objects---essence-of-js">Objects - Essence
of JS</h2>
<p><em><strong>What is an Object ?</strong></em><br>
Simply put, an Object is valid JSON code. It is a collection of key-value pairs,
Consider the analogy of a dictionary. If you know a word, you can lookup its
meaning. Similarly, if you know a key of an Object you can get the corresponding
value. <em>But what does an object look like ? Here’s an example:</em></p>
<pre class=" language-js"><code class="prism language-js"><span class="token
keyword">const</span> object <span class="token operator">=</span> <span
class="token punctuation">{</span><span class="token string">"a"</span><span
class="token punctuation">:</span> <span class="token number">1</span><span
class="token punctuation">,</span> <span class="token string">"b"</span><span
class="token punctuation">:</span> <span class="token string">"2"</span><span
class="token punctuation">,</span> <span class="token string">"c"</span><span
class="token punctuation">:</span> <span class="token punctuation">[</span><span
class="token number">1</span><span class="token punctuation">,</span><span
class="token number">2</span><span class="token punctuation">]</span><span
class="token punctuation">,</span> <span class="token number">6</span> <span
class="token punctuation">:</span> <span class="token punctuation">{</span><span
class="token string">"a"</span><span class="token punctuation">:</span> <span
class="token number">1</span><span class="token punctuation">}</span><span
class="token punctuation">}</span>
</code></pre>
<p>Notice how the keys can be strings as well as integers. Also, each key can have
a value of a type different from others and that objects can be nested within other
objects. The <code>""</code> surrounding the keys are redundant and unnecessary.
The above can also be expressed in a more readable manner as:</p>
<pre class=" language-js"><code class="prism language-js"><span class="token
keyword">const</span> object <span class="token operator">=</span> <span
class="token punctuation">{</span>
a<span class="token punctuation">:</span> <span class="token
number">1</span><span class="token punctuation">,</span>
b<span class="token punctuation">:</span> <span class="token
string">"2"</span><span class="token punctuation">,</span>
c<span class="token punctuation">:</span> <span class="token
punctuation">[</span><span class="token number">1</span><span class="token
punctuation">,</span> <span class="token number">2</span><span class="token
punctuation">]</span><span class="token punctuation">,</span>
<span class="token number">6</span><span class="token punctuation">:</span>
<span class="token punctuation">{</span><span class="token string">"a"</span><span
class="token punctuation">:</span> <span class="token number">1</span><span
class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre>
<p><em><strong>How to manipulate and access Objects ?</strong></em></p>
<p>To <em>access</em> a value we use two syntaxes:</p>
<pre class=" language-js"><code class="prism language-js"><span class="token
keyword">const</span> obj <span class="token operator">=</span> <span class="token
punctuation">{</span>
<span class="token string">"a"</span><span class="token punctuation">:</span>
<span class="token number">1</span><span class="token punctuation">,</span>
<span class="token string">"b"</span><span class="token punctuation">:</span>
<span class="token punctuation">[</span><span class="token number">1</span><span
class="token punctuation">,</span> <span class="token number">2</span><span
class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token string">"c"</span> <span class="token
punctuation">:</span> <span class="token string">"qwerty"</span>
<span class="token punctuation">}</span>
<span class="token comment">//First Way</span>
console<span class="token punctuation">.</span><span class="token
function">log</span><span class="token punctuation">(</span>obj<span class="token
punctuation">.</span>a<span class="token punctuation">)</span> <span class="token
comment">// 1</span>
console<span class="token punctuation">.</span><span class="token
function">log</span><span class="token punctuation">(</span>obj<span class="token
punctuation">.</span>b<span class="token punctuation">)</span> <span class="token
comment">// [1, 2]</span>
console<span class="token punctuation">.</span><span class="token
function">log</span><span class="token punctuation">(</span>obj<span class="token
punctuation">.</span>b<span class="token punctuation">[</span><span class="token
number">1</span><span class="token punctuation">]</span><span class="token
punctuation">)</span> <span class="token comment">// 2</span>
console<span class="token punctuation">.</span><span class="token
function">log</span><span class="token punctuation">(</span>obj<span class="token
punctuation">.</span>c<span class="token punctuation">)</span> <span class="token
comment">// "qwerty"</span>

<span class="token comment">//Second Way</span>


console<span class="token punctuation">.</span><span class="token
function">log</span><span class="token punctuation">(</span>obj<span class="token
punctuation">[</span><span class="token string">"a"</span><span class="token
punctuation">]</span><span class="token punctuation">)</span> <span class="token
comment">// 1</span>
console<span class="token punctuation">.</span><span class="token
function">log</span><span class="token punctuation">(</span>obj<span class="token
punctuation">[</span><span class="token string">"b"</span><span class="token
punctuation">]</span><span class="token punctuation">)</span> <span class="token
comment">// [1, 2]</span>
console<span class="token punctuation">.</span><span class="token
function">log</span><span class="token punctuation">(</span>obj<span class="token
punctuation">[</span><span class="token string">"b"</span><span class="token
punctuation">]</span><span class="token punctuation">[</span><span class="token
number">1</span><span class="token punctuation">]</span><span class="token
punctuation">)</span> <span class="token comment">// 2</span>
console<span class="token punctuation">.</span><span class="token
function">log</span><span class="token punctuation">(</span>obj<span class="token
punctuation">[</span><span class="token string">"c"</span><span class="token
punctuation">]</span><span class="token punctuation">)</span> <span class="token
comment">// "qwerty"</span>

</code></pre>
<p>The first way is just a shorthand of the second way. Basically when you do
<code>obj.a</code>, JS evaluates that as: <code>obj["a"]</code> . So anything you
put after (<code>.</code>) is considered a string and evaluated as such. But how do
we access keys that are numbers then? and what if we need to use a variable as a
key? That’s where the second method comes in. The second syntax is
<em>generally</em> used only when variables within the code are to be used as keys
or the keys are numbers. e.g.</p>
<pre class=" language-js"><code class="prism language-js"><span class="token
keyword">const</span> obj <span class="token operator">=</span> <span class="token
punctuation">{</span>
<span class="token string">"a"</span><span class="token punctuation">:</span>
<span class="token number">9</span><span class="token punctuation">,</span>
<span class="token string">"b"</span><span class="token punctuation">:</span>
<span class="token punctuation">[</span><span class="token number">1</span><span
class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token number">8</span> <span class="token punctuation">:</span>
<span class="token string">"abcd"</span>
<span class="token punctuation">}</span>
<span class="token keyword">let</span> variable1 <span class="token
operator">=</span> <span class="token string">"a"</span>
<span class="token keyword">let</span> variable2 <span class="token
operator">=</span> <span class="token number">8</span>

console<span class="token punctuation">.</span><span class="token


function">log</span><span class="token punctuation">(</span>obj<span class="token
punctuation">[</span>variable1<span class="token punctuation">]</span><span
class="token punctuation">)</span> <span class="token comment">// 9</span>
console<span class="token punctuation">.</span><span class="token
function">log</span><span class="token punctuation">(</span>obj<span class="token
punctuation">[</span>variable2<span class="token punctuation">]</span><span
class="token punctuation">)</span> <span class="token comment">// "abcd"</span>
</code></pre>
<p>If we try and access a key of the object which is not defined, it,
unsurprisingly, returns <code>undefined</code>. See:</p>
<pre class=" language-js"><code class="prism language-js"><span class="token
keyword">const</span> obj <span class="token operator">=</span> <span class="token
punctuation">{</span>
<span class="token string">"a"</span> <span class="token
punctuation">:</span> <span class="token number">1</span><span class="token
punctuation">,</span>
<span class="token string">"b"</span> <span class="token
punctuation">:</span> <span class="token number">2</span>
<span class="token punctuation">}</span>
console<span class="token punctuation">.</span><span class="token
function">log</span><span class="token punctuation">(</span>obj<span class="token
punctuation">.</span>f<span class="token punctuation">)</span> <span class="token
comment">//undefined</span>
</code></pre>
<p><em>Assignment</em> of values to keys of Objects is done in the same two ways
as:</p>
<pre class=" language-js"><code class="prism language-js"><span class="token
keyword">const</span> obj <span class="token operator">=</span> <span class="token
punctuation">{</span><span class="token punctuation">}</span>
obj<span class="token punctuation">.</span>a <span class="token operator">=</span>
<span class="token number">7</span>
obj<span class="token punctuation">[</span><span class="token number">7</span><span
class="token punctuation">]</span> <span class="token operator">=</span> <span
class="token string">"l"</span>
console<span class="token punctuation">.</span><span class="token
function">log</span><span class="token punctuation">(</span>obj<span class="token
punctuation">)</span> <span class="token comment">// {a: 7, 7: "l"}</span>
</code></pre>
<p><em><strong>You were taught wrong about Arrays!</strong></em><br>
Well, not completely wrong but still what you were taught was misleading. Arrays
are extensions of Objects (<em>we will discuss inheritance and extensions of parent
classes when we study classes, at a later date</em>). See, you can make arrays by
using objects too. Let’s say we have an array <code>const arr = [1, 7, 9]</code>.
Now this array is just an object. Its indices are the keys of the object and its
entries are just, in fact, the values of the object. So, we can write
<code>arr</code> as:</p>
<pre class=" language-js"><code class="prism language-js"><span class="token
comment">//this behaves the same as the array</span>
<span class="token keyword">const</span> arr <span class="token operator">=</span>
<span class="token punctuation">{</span>
<span class="token number">0</span><span class="token punctuation">:</span>
<span class="token number">1</span><span class="token punctuation">,</span>
<span class="token number">1</span><span class="token punctuation">:</span>
<span class="token number">7</span><span class="token punctuation">,</span>
<span class="token number">2</span><span class="token punctuation">:</span>
<span class="token number">9</span>
<span class="token punctuation">}</span>
</code></pre>
<p><em>Note: This is only for understanding and concept building. It is strongly
recommended to use arrays for lists and objects for key-value pairs. This is
because arrays have their own set of methods (the functions that come after the
(<code>.</code>) e.g. In <code>console.log()</code>, <code>.log()</code> is a
<code>method</code> of <code>console</code> which is for all practical sakes and
purposes an Object) that objects lack.</em></p>
<p>For now, this is all you need to know. Here’s a task for you:</p>
<blockquote>
<p>Write a function <strong>dictionary</strong> that returns 3 synonyms of a given
word. Make it work for any 10 words of the English language. If the dictionary
doesn’t contain the word make the function return <code>-1</code>. For a solution
see: <a href="https://pastebin.com/fgRvucrb">Solution</a></p>
</blockquote>
</div>
</body>

</html>

You might also like