mozilla

Compare Revisions

JavaScript data types and data structures

Change Revisions

Revision 375261:

Revision 375261 by techlivezheng on

Revision 378845:

Revision 378845 by noahcollins on

Title:
Javascript Data structures
Javascript Data structures
Slug:
JavaScript/Data_structures
JavaScript/Data_structures
Tags:
"JavaScript"
JavaScript,
Content:

Revision 375261
Revision 378845
n43      Booleans, null and, undefinedn43      Booleans, null, and undefined
n46      Within these types, four constants can be found: <code><span46      Within these types, four constants can be found: <code><spa
>n style="background-color:#ffff00;">true</span></code><span style>n style="background-color:#ffff00;">true</span></code>, <code><sp
>="background-color:#ffff00;">,</span> <code><span style="backgrou>an style="background-color:#ffff00;">false</span></code>, <code><
>nd-color:#ffff00;">false</span></code><span style="background-col>span style="background-color:#ffff00;">null</span></code>, and <c
>or:#ffff00;">,</span> <code><span style="background-color:#ffff00>ode><span style="background-color:#ffff00;">undefined</span></cod
>;">null</span></code><span style="background-color:#ffff00;">, an>e>. Since these are constants, they cannot represent rich data (o
>d</span> <code><span style="background-color:#ffff00;">undefined<>r data structures).
>/span></code>. Since these are constants, it is not possible to r 
>epresent rich data (and data structures) with these. 
n52      According to the ECMAScript standard, there is only one numn52      According to the ECMAScript standard, there is only one num
>ber type which is the "<span style="background-color:#ffff00;">do>ber type: the "<span style="background-color:#ffff00;">double-pre
>uble-precision 64-bit binary format IEEE 754 value"</span>, speci>cision 64-bit binary format IEEE 754 value</span>". There is no s
>fically there is no specific type for integers. In addition to be>pecific type for integers. In addition to being able to represent
>ing able to represent floating-point numbers, it has some symboli> floating-point numbers, it has some symbolic values: <code>+Infi
>c values: <code>+Infinity</code>, <code>-Infinity</code>, and <co>nity</code>, <code>-Infinity</code>, and <code>NaN</code> (not-a-
>de>NaN</code> (not-a-number).>number).
n61      Unlike in languages like C, <span style="background-color:#n61      Unlike in languages like C, <span style="background-color:#
>ffff00;">JavaScript strings are immutable.</span> This means that>ffff00;">JavaScript strings are immutable</span>. This means that
> once a string is created, it is not possible to modify it. Howev> once a string is created, it is not possible to modify it. Howev
>er, it is still possible to create another string based on an ope>er, it is still possible to create another string based on an ope
>ration on the original string, for example, a substring of the or>ration on the original string. For example:
>iginal (by picking individual letters or using <a href="/en/JavaS 
>cript/Reference/Global_Objects/String/substr" title="substr"><cod 
>e>String.substr()</code></a>) or a concatenation of two strings u 
>sing the concatenation operator (<code>+</code>) or <a href="/en/ 
>JavaScript/Reference/Global_Objects/String/concat" title="concat" 
>><code>String.concat()</code></a>. 
nn63    <ul>
64      <li>A substring of the original by picking individual lette
 >rs or using <a href="/en/JavaScript/Reference/Global_Objects/Stri
 >ng/substr" title="substr"><code>String.substr()</code></a>.
65      </li>
66      <li>A concatenation of two strings using the concatenation 
 >operator (<code>+</code>) or <a href="/en/JavaScript/Reference/Gl
 >obal_Objects/String/concat" title="concat"><code>String.concat()<
 >/code></a>.
67      </li>
68    </ul>
n67      It can be tempting to use strings to represent complex datan73      It can be tempting to use strings to represent complex data
>They hava couple of nice properties:>Doing this has somshort-term benefits:
n78      With conventions, it is possible to represent any data strun84      With conventions, it is possible to represent any data stru
>cture in a string. This does not make it a good idea. For instanc>cture in a string. This does not make it a good idea. For instanc
>e, with a separator, one could emulate a list (while a JavaScript>e, with a separator, one could emulate a list (while a JavaScript
> array would be more suitable). Unfortunately, when the separator> array would be more suitable). Unfortunately, when the separator
> is used in one of the "list" elements, then, the list is broken.> is used in one of the "list" elements, then, the list is broken.
> An escape character can be chosen, etc. All of this requires con> An escape character can be chosen, etc. All of this requires con
>ventions and becomes a maintenance burden which does not exist wh>ventions and creates an unneccessary maintenance burden.
>en the right tool for the right job is used. 
n81      It is recommended to use strings for <span style="backgrounn87      Use strings for <span style="background-color:#ffff00;">tex
>d-color:#ffff00;">textual data and symbolic data</span>, but to p>tual data</span> and <span style="background-color:#ffff00;">symb
>arse strings and use the right abstraction for what it is suppose>olic data</span> only. When representing complex data, parse stri
>d to represent otherwise.>ngs and use the appropriate abstraction.
n87      In JavaScript, <span style="background-color:#ffff00;">objen93      In JavaScript, <span style="background-color:#ffff00;">obje
>cts can be seen as a bag of properties</span>. With the <a href=">cts can be seen as a bag of properties</span>. With the <a href="
>/en/JavaScript/Guide/Values,_variables,_and_literals#Object_liter>/en/JavaScript/Guide/Values,_variables,_and_literals#Object_liter
>als" title="en/JavaScript/Guide/Values,_variables,_and_literals#O>als" title="en/JavaScript/Guide/Values,_variables,_and_literals#O
>bject_literals">object literal syntax</a>, a limited set of prope>bject_literals">object literal syntax</a>, a limited set of prope
>rties are initialized; then properties can be added and removed. >rties are initialized; then properties can be added and removed. 
>Property values can be values of any type, including other object>Property values can be values of any type, including other object
>s which enables building complex data structures.>s, which enables building complex data structures.
n93      A JavaScript object is a <span style="background-color:#fffn99      A JavaScript object is a <span style="background-color:#fff
>f00;">mapping between keys and values</span>. K<span style="backg>f00;">mapping between keys and values</span>. <span style="backgr
>round-color:#ffd700;">eys are string</span>s and <span style="bac>ound-color:#ffff00;">Keys are strings</span> and <span style="bac
>kground-color:#ffff00;">values can be anything.</span> This makes>kground-color:#ffff00;">values can be anything</span>. This makes
> objects a natural fit for <a class="external" href="http://en.wi> objects a natural fit for <a class="external" href="http://en.wi
>kipedia.org/wiki/Hash_table">hashmaps</a>. However, one has to be>kipedia.org/wiki/Hash_table">hashmaps</a>. However, the non-stand
> careful about the non-standard <a href="/en/JavaScript/Reference>ard <code><a href="/en/JavaScript/Reference/Global_Objects/Object
>/Global_Objects/Object/proto" title="__proto__">__proto__</a> pse>/proto" title="__proto__">__proto__</a></code> pseudo property mu
>udo property. In environment that supports it, <code><span style=>st be used with caution. In environments that support it, <span s
>"background-color:#ffff00;">'__proto__'</span></code> <span style>tyle="background-color:#ffff00;">assigning a new value to <code>_
>="background-color:#ffff00;">does not allow to manipulate one pro>_proto__</code> also changes the value of the internal object pro
>perty with such a name, but the object prototype</span>. In conte>totype</span>. In a context where it is not necessarily known whe
>xt where it is not necessarily known where the string comes from >re the string comes from (like an input field), caution is requir
>(like an input field), caution is required: <a class="external" h>ed: <a class="external" href="http://productforums.google.com/for
>ref="http://productforums.google.com/forum/#!category-topic/docs/>um/#!category-topic/docs/documents/0hQWeOvCcHU">others have been 
>documents/0hQWeOvCcHU">other have been burned by this</a>. In tha>burned by this</a>. In that case, an alternative is to use a prop
>t case, an alternative is to use a proper <a class="external" hre>er <a class="external" href="http://code.google.com/p/google-caja
>f="http://code.google.com/p/google-caja/source/browse/trunk/src/c>/source/browse/trunk/src/com/google/caja/ses/StringMap.js?r=4779"
>om/google/caja/ses/StringMap.js?r=4779"><span style="background-c>><span style="background-color:#ffff00;">StringMap abstraction</s
>olor:#ffff00;">StringMap abstraction</span></a><span style="backg>pan></a>.
>round-color:#ffff00;">.</span> 
n102      <a href="/en/JavaScript/Reference/Global_Objects/Array" titn108      <a href="/en/JavaScript/Reference/Global_Objects/Array" tit
>le="Array">Arrays</a> are r<span style="background-color:#ffff00;>le="Array">Arrays</a> are <span style="background-color:#ffff00;"
>">egular objects</span> for which there is a <span style="backgro>>regular objects</span> for which there is a <span style="backgro
>und-color:#ffff00;">particular relationship between integer-key-e>und-color:#ffff00;">particular relationship between integer-key-e
>d properties and the 'length' property.</span> Additionally, arra>d properties and the 'length' property</span>. Additionally, arra
>ys inherit from Array.prototype which provides to them a handful >ys inherit from <code>Array.prototype</code> which provides to th
>of convenient methods to manipulate arrays like <a href="/en/Java>em a handful of convenient methods to manipulate arrays like <cod
>Script/Reference/Global_Objects/Array/indexOf" title="en/JavaScri>e><a href="/en/JavaScript/Reference/Global_Objects/Array/indexOf"
>pt/Reference/Global_Objects/Array/indexOf">indexOf</a> (searching> title="en/JavaScript/Reference/Global_Objects/Array/indexOf">ind
> a value in the array) or <a href="/en/JavaScript/Reference/Globa>exOf</a></code> (searching a value in the array) or <code><a href
>l_Objects/Array/push" title="en/JavaScript/Reference/Global_Objec>="/en/JavaScript/Reference/Global_Objects/Array/push" title="en/J
>ts/Array/push">push</a> (adding an element to the array), etc. Th>avaScript/Reference/Global_Objects/Array/push">push</a></code> (a
>is makes arrays a perfect candidate to represent lists or sets.>dding an element to the array), etc. This makes arrays a perfect 
 >candidate to represent lists or sets.
n108      When considering representing dates, the best choice is cern114      When representing dates, the best choice is to use the buil
>tainly to use the built-in <a href="/en/JavaScript/Reference/Glob>t-in <a href="/en/JavaScript/Reference/Global_Objects/Date" title
>al_Objects/Date" title="en/JavaScript/Reference/Global_Objects/Da>="en/JavaScript/Reference/Global_Objects/Date"><code>Date</code> 
>te">Date utility</a>>utility</a>.
t123      Usually, to bind data to a DOM node, one could set propertit129      Usually, to bind data to a DOM node, one could set properti
>es directly on the object or use data-* attributes. This has the >es directly on the object or use <code>data-*</code> attributes. 
>downside that the data is available to any script running in the >This has the downside that the data is available to any script ru
>same context. Maps and WeakMaps make easy to privately bind data >nning in the same context. Maps and WeakMaps make easy to private
>to an object.>ly bind data to an object.

Back to History