mozilla

Compare Revisions

String.prototype.charCodeAt()

Change Revisions

Revision 478979:

Revision 478979 by Moyogo on

Revision 478981:

Revision 478981 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 478979
Revision 478981
t164</pre>t
165    <div>
166      /*! http://mths.be/codepointat v0.1.0 by @mathias */164/*! http://mths.be/codepointat v0.1.0 by @mathias */
167    </div>
168    <div>
169      if (!String.prototype.codePointAt) {165if (!String.prototype.codePointAt) {
170    </div>
171    <div>
172      &nbsp; &nbsp; String.prototype.codePointAt = function(posit166    String.prototype.codePointAt = function(position) {
>ion) { 
173    </div>167        var string = String(this);
174    <div>168        var size = string.length;
175      &nbsp; &nbsp; &nbsp; &nbsp; var string = String(this);169        // `ToInteger`
176    </div>
177    <div>
178      &nbsp; &nbsp; &nbsp; &nbsp; var size = string.length;
179    </div>
180    <div>
181      &nbsp; &nbsp; &nbsp; &nbsp; // `ToInteger`
182    </div>
183    <div>
184      &nbsp; &nbsp; &nbsp; &nbsp; var index = position ? Number(p170        var index = position ? Number(position) : 0;
>osition) : 0; 
185    </div>171        if (isNaN(index)) {
186    <div>172            index = 0;
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>
217      &nbsp; &nbsp; &nbsp; &nbsp; if ( // check if it’s the start
> of a surrogate pair 
218    </div>
219    <div>
220      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; first &gt;= 0xD80
>0 &amp;&amp; first &lt;= 0xDBFF &amp;&amp; // high surrogate 
221    </div>
222    <div>
223      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; size &gt; index +
> 1 // there is a next code unit 
224    </div>
225    <div>
226      &nbsp; &nbsp; &nbsp; &nbsp; ) {
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>
253      }173        }
254    </div>174        // Account for out-of-bounds indices:
175        if (index &lt; 0 || index &gt;= size) {
176            return undefined;
177        }
178        // Get the first code unit
179        var first = string.charCodeAt(index);
180        var second;
181        if ( // check if it’s the start of a surrogate pair
182            first &gt;= 0xD800 &amp;&amp; first &lt;= 0xDBFF &amp
 >;&amp; // high surrogate
183            size &gt; index + 1 // there is a next code unit
184        ) {
185            second = string.charCodeAt(index + 1);
186            if (second &gt;= 0xDC00 &amp;&amp; second &lt;= 0xDFF
 >F) { // low surrogate
187                // http://mathiasbynens.be/notes/javascript-encod
 >ing#surrogate-formulae
188                return (first - 0xD800) * 0x400 + second - 0xDC00
 > + 0x10000;
189            }
190        }
191        return first;
192    };
193}
194</pre>

Back to History