mozilla

Compare Revisions

String.prototype.charCodeAt()

Change Revisions

Revision 470213:

Revision 470213 by mathiasbynens on

Revision 478979:

Revision 478979 by Moyogo on

Title:
String.charCodeAt
String.charCodeAt
Slug:
Web/JavaScript/Reference/Global_Objects/String/charCodeAt
Web/JavaScript/Reference/Global_Objects/String/charCodeAt
Tags:
"String Methods", "JavaScript Reference", "Unicode", "JavaScript"
"String Methods", "JavaScript Reference", "Unicode", "JavaScript"
Content:

Revision 470213
Revision 478979
tt164</pre>
165    <div>
164/*! http://mths.be/codepointat v0.1.0 by @mathias */166      /*! http://mths.be/codepointat v0.1.0 by @mathias */
167    </div>
168    <div>
165if (!String.prototype.codePointAt) {169      if (!String.prototype.codePointAt) {
170    </div>
171    <div>
166        String.prototype.codePointAt = function(position) {172      &nbsp; &nbsp; String.prototype.codePointAt = function(posit
 >ion) {
167                var string = String(this);173    </div>
168                var size = string.length;174    <div>
169                // `ToInteger`175      &nbsp; &nbsp; &nbsp; &nbsp; var string = String(this);
170                var index = position ? Number(position) : 0;176    </div>
171                if (isNaN(index)) {177    <div>
172                        index = 0;178      &nbsp; &nbsp; &nbsp; &nbsp; var size = string.length;
173                }179    </div>
174                // Account for out-of-bounds indices:180    <div>
175                if (index &lt; 0 || index &gt;= size) {181      &nbsp; &nbsp; &nbsp; &nbsp; // `ToInteger`
176                        return undefined;182    </div>
177                }183    <div>
178                // Get the first code unit184      &nbsp; &nbsp; &nbsp; &nbsp; var index = position ? Number(p
 >osition) : 0;
179                var first = string.charCodeAt(index);185    </div>
180                var second;186    <div>
187      &nbsp; &nbsp; &nbsp; &nbsp; if (isNaN(index)) {
188    </div>
189    <div>
190      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; index = 0;
191    </div>
192    <div>
193      &nbsp; &nbsp; &nbsp; &nbsp; }
194    </div>
195    <div>
196      &nbsp; &nbsp; &nbsp; &nbsp; // Account for out-of-bounds in
 >dices:
197    </div>
198    <div>
199      &nbsp; &nbsp; &nbsp; &nbsp; if (index &lt; 0 || index &gt;=
 > size) {
200    </div>
201    <div>
202      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return undefined;
203    </div>
204    <div>
205      &nbsp; &nbsp; &nbsp; &nbsp; }
206    </div>
207    <div>
208      &nbsp; &nbsp; &nbsp; &nbsp; // Get the first code unit
209    </div>
210    <div>
211      &nbsp; &nbsp; &nbsp; &nbsp; var first = string.charCodeAt(i
 >ndex);
212    </div>
213    <div>
214      &nbsp; &nbsp; &nbsp; &nbsp; var second;
215    </div>
216    <div>
181                if ( // check if it’s the start of a surrogate pa217      &nbsp; &nbsp; &nbsp; &nbsp; if ( // check if it’s the start
>ir> of a surrogate pair
182                        first &gt;= 0xD800 &amp;&amp; first &lt;=218    </div>
> 0xDBFF &amp;&amp; // high surrogate 
183                        size &gt; index + 1 // there is a next co219    <div>
>de unit 
184                ) {220      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; first &gt;= 0xD80
 >0 &amp;&amp; first &lt;= 0xDBFF &amp;&amp; // high surrogate
185                        second = string.charCodeAt(index + 1);221    </div>
186                        if (second &gt;= 0xDC00 &amp;&amp; second222    <div>
> &lt;= 0xDFFF) { // low surrogate 
187                                // http://mathiasbynens.be/notes/223      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; size &gt; index +
>javascript-encoding#surrogate-formulae> 1 // there is a next code unit
188                                return (first - 0xD800) * 0x400 +224    </div>
> second - 0xDC00 + 0x10000; 
189                        }225    <div>
190                }226      &nbsp; &nbsp; &nbsp; &nbsp; ) {
191                return first;227    </div>
228    <div>
229      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; second = string.c
 >harCodeAt(index + 1);
230    </div>
231    <div>
232      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (second &gt;= 
 >0xDC00 &amp;&amp; second &lt;= 0xDFFF) { // low surrogate
233    </div>
234    <div>
235      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // 
 >http://mathiasbynens.be/notes/javascript-encoding#surrogate-formu
 >lae
236    </div>
237    <div>
238      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ret
 >urn (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;
239    </div>
240    <div>
241      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }
242    </div>
243    <div>
244      &nbsp; &nbsp; &nbsp; &nbsp; }
245    </div>
246    <div>
247      &nbsp; &nbsp; &nbsp; &nbsp; return first;
248    </div>
249    <div>
250      &nbsp; &nbsp; };
251    </div>
252    <div>
192        };253      }
193}254    </div>
194</pre>

Back to History