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
|