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
| 
 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
| 
 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 0. > "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
 | 
| 
 
  | 
 Return 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
| 
 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"  |