String
The String()
constructor creates string objects. Primitive strings are turned into objects behind the scenes if you call a method on them as if they were objects. Omitting new
gives you primitive strings.
Creating a string object and a string primitive:
> var s_obj = new String('potatoes'); > var s_prim = 'potatoes'; > typeof s_obj; "object" > typeof s_prim; "string"
The object and the primitive are not equal when compared by type with ===
, but they are when compared with ==
which does type coercion:
> s_obj === s_prim; false > s_obj == s_prim; true
length
is a property of the string objects:
> s_obj.length; 8
If you access length
on a primitive string, the primitive is converted to an object behind the scenes and the operation is successful:
> s_prim.length; 8
String literals work fine too:
> "giraffe".length;
7
Members of the String constructor
Following are the members of the String
constructor:
Property/method |
Description |
|
Returns a string created using the Unicode values of the input: > String.fromCharCode(115, 99, 114, 105, 112, 116); "script"
|
The String.prototype members
Consider the following String.prototype
members:
Property/method |
Description |
|
The number of characters in the string: > new String('four').length; 4
|
|
Returns the character at the specified position. Positions start at > "script".charAt(0); "s"
Since ES5, it's also possible to use array notation for the same purpose. (This feature has been long supported in many browsers before ES5, but not IE):
> "script"[0]; "s"
|
|
Returns the numeric code (Unicode) of the character at the specified position: > "script".charCodeAt(0); 115
|
|
Returns a new string glued from the input pieces: > "".concat('zig', '-', 'zag'); "zig-zag"
|
|
If the needle matches a part of the string, the position of the match is returned. The optional second parameter defines where the search should start from. Returns > "javascript".indexOf('scr'); 4 > "javascript".indexOf('scr', 5); -1
|
|
Same as > "javascript".lastIndexOf('a'); 3
|
|
Compares two strings in the current locale. Returns > "script".localeCompare('crypt'); 1 > "script".localeCompare('sscript'); -1 > "script".localeCompare('script'); 0
|
|
Accepts a regular expression object and returns an array of matches: > "R2-D2 and C-3PO".match(/[0-9]/g); ["2", "2", "3"]
|
|
Allows you to replace the matching results of a regexp pattern. The replacement can also be a callback function. Capturing groups are available as > "R2-D2".replace(/2/g, '-two'); "R-two-D-two" > "R2-D2".replace(/(2)/g,'$1$1'); "R22-D22"
|
|
Returns the position of the first regular expression match: > "C-3PO".search(/[0-9]/); 2
|
|
Returns the part of a string identified by the start and end positions. If > "R2-D2 and C-3PO".slice(4, 13); "2 and C-3" > "R2-D2 and C-3PO".slice(4, -1); "2 and C-3P"
|
|
Turns a string into an array. The second parameter, limit, is optional. As with > "1,2,3,4".split(/,/); ["1", "2", "3", "4"] > "1,2,3,4".split(',', 2); ["1", "2"]
|
|
Similar to > "R2-D2 and C-3PO".substring(4, 13); "2 and C-3" > "R2-D2 and C-3PO".substring(13, 4); "2 and C-3"
|
|
Transforms the string to lowercase: > "Java".toLowerCase(); "java"
|
|
Transforms the string to uppercase: > "Script".toUpperCase(); "SCRIPT"
|
ECMAScript 5 additions to String
Following are the ECMAScript 5 additions to String:
Property/method |
Description |
|
Instead of using a regular expression to remove whitespace before and after a string (as in ES3), you have a > " \t beard \n".trim(); "beard" Or in ES3: > " \t beard \n".replace(/\s/g, ""); "beard"
|
ECMAScript 6 additions to String
Following are the list of all the ECMAScript 6 additions to String:
Template Literals are used to interpolate single or multi-line strings.
Template literals are enclosed by the back-tick (
|
var a = 5; var b = 10; console.log(`Fifteen is ${a + b}`);
|
|
" ".repeat(4 * depth) "foo".repeat(3)
|
These are new string searching methods
|
"hello".startsWith( "ello", 1) // true "hello".endsWith( "hell",4) // true "hello".includes( "ell") // true "hello".includes( "ell", 1) // true "hello".includes( "ell", 2) // false
|