JavaScript 数据类型之字符串 String
1.定义
字符串,用一对单引号(’ ')或双引号(“ ”)及引号内的字符构成,引号中间的部分可以任意多个,也可以是没有字符的空字符串。
字符串中如果字符包含了双引号,则其外部应该由单引号标示,反之相同。
2.创建方法
var str = new String(s); // String {"s"}
var str2 = String(123); // "123"当不用 new 运算符调用 String() 时,它只把 123 转换成原始的字符串,并返回转换后的值。
var str3 = "sss"; // "sss"
var str4 = ""; // ""
3.属性
3.1 length属性 - 字符串的长度
var str5 = "1234";
str5.length; // 4
3.2 constructor属性 - 对创建该对象的函数的引用
var str = new String(666);
str.constructor; // ƒ String() { [native code] }
var str2 = "555";
str2.constructor; // ƒ String() { [native code] }
3.3 prototype属性 - 允许您向对象添加属性和方法
String.prototype.init = {
name: "string"
}
var str = new String("1");
str.init.name; // "string"
4.String对象方法
4.1 charCodeAt(number) 方法返回一个整数,代表指定位置字符的Unicode编码,将被处理字符的从零开始计数的编号
var st = "abc";
st.charCodeAt(1); // 98
st.charCodeAt(4); // NaN
4.2 fromCharCode方法从一些Unicode字符串中返回一个字符串
String.fromCharCode(98, 97, 65, 99, 119); // "baAcw"
4.3 charAt方法返回指定索引位置处的字符。如果超出有效范围的索引值返回空字符串
var str = "abc";
str.charAt(1); // b
str.charAt(4); // ""
4.4 slice(start[,end])方法返回字符串的片段
var str = "string";
str.slice(1); // "tring"
str.slice(1,3); // "tr"
str.slice(-1); // "g" 相当于 str.slice(str.length + (-1))
str.slice(-5, -1); // "trin" 相当于 str.slice(str.length + (-5), str.length + (-1))
4.5 substring(start,end)方法返回位于String对象中指定位置的子字符串
var str = "hello world";
str.substring(1, 4); // "ell"
str.substring(1); // "ello world"
str.substring(-1); // "hello world" 相当于 str.substring(0)
str.substring(-2, -1); // "" 相当于 str.substring(0, 0)
str.substring(NaN, -1); // "" 相当于 str.substring(0, 0)
4.6 substr(start[,length])方法返回一个从指定位置开始的指定长度的子字符串
var str = "javascript";
str.substr(2); // "vascript"
str.substr(2, 2); // "va"
str.substr(-2, 3); // "pt" 相当于 str.substr(str.length + (-2), 3)
str.substr(-2, -1); // "" 相当于 str.substr(str.length + (-2), 0)
4.7 indexOf(str[,startIndex])方法返回String对象内第一次出现子字符串位置。如果没有找到子字符串,则返回-1。startIndex该整数值指出在String对象内开始查找的索引。如果省略,则从字符串的开始处查找。
var str = "indexOfFunction";
str.indexOf("index"); // 0
str.indexOf("index", 2); // -1
str.indexOf("of", 2); // -1
str.indexOf("Of", 2); // 5
4.8 lastIndexOf(str[,startIndex])方法返回String对象中字符串最后出现的位置。如果没有匹配到子字符串,则返回-1。 startindex该整数值指出在String对象内进行查找的开始索引位置。如果省略,则查找从字符串的末尾开始。
var str = "lastIndexOfFuntion";
str.lastIndexOf("Fun"); // 11
这里不好理解,我的理解是:str中先找到能匹配的"Fun"的索引值11,而后面的strtIndex值只要是大于或等于11就返回11,而不是从字符串中"lastIndexOfFu"中去重新匹配"Fun"。
str.lastIndexOf("Fun", 11); // 11
str.lastIndexOf("Fun", 12); // 11
str.lastIndexOf("Fun", 13); // 11
str.lastIndexOf("Fun", -1); // -1
var str = "aaaFunbbFunccc";
str.lastIndexOf("Fun"); // 8 [3, 8]中最后一个是 8
str.lastIndexOf("Fun", 7); // 3 [3, 8]中判断小于startIndex的最大的一个 3
str.lastIndexOf("Fun", 6); // 3
str.lastIndexOf("Fun", 5); // 3
str.lastIndexOf("Fun", 4); // 3
str.lastIndexOf("Fun", 3); // 3
str.lastIndexOf("Fun", 2); // -1
4.9 search(reExp)方法返回与正则表达式查找内容匹配的第一个字符串的位置
var str = "aaaBbccdd";
str.search(/bb/i); // 3
str.search("Bb"); // 3
str.search("bb"); // -1
4.10 concat方法返回字符串值,该值包含了两个或多个提供的字符串的连接
var str = "hello";
var str2 = "world";
str.concat(str2); // "helloworld"
str.concat([1,2,3]); // "hello1,2,3"
4.11 split(str[, length])将一个字符串分割为子字符串,然后将结果作为字符串数组返回
var str = "hello";
str.split(""); // ["h", "e", "l", "l", "o"]
str.split("", 3); // ["h", "e", "l"]
4.12 toLowerCase方法返回一个字符串,该字符串中的字母被转换成小写
var str = "Hello";
str.toLowerCase(); // "hello"
"HellO".toLowerCase(); // "hello"
4.13 toUpperCase方法返回一个字符串,该字符串中的所有字母都被转换为大写字母
var str = "Hello World";
str.toUpperCase(); // "HELLO WORLD"
4.14 trim() 去除首尾空格
var str = " 12 34 ";
str.trim(); // "12 34"
4.15 replace() 替换
var str = "hello world";
str.replace(/o/gi, "a"); // "hella warld"
4.16 localeCompare方法用于比较两个字符串。它返回一个整数,如果小于0,表示第一个字符串小于第二个字符串;如果等于0,表示两者相等;如果大于0,表示第一个字符串大于第二个字符串
var str = "hello";
str.localeCompare("hellO"); // -1
str.localeCompare("hello"); // 0
str.localeCompare("hellk"); // 1
4.17 match() 匹配字符串是否含有查找的字符,有则返回数组,数组具有 index 和 input 属性; 没有则返回null
var str = "hello world";
var arr = str.match("l"); // ["l", index: 2, input: "hello world", groups: undefined]
arr[0]; // "l"
arr.index; // 2
arr.input; // "hello world"
str.match("l"); // ["l", "l", "l"]
str.match("la"); // null
5 使用String函数,可以将任意类型的值转化成字符串。转换规则如下:
原始类型值的转换规则
String("abc"); // "abc"
String(''); // ""
数值: 转为相应的字符串
String('123'); // "123"
字符串: 转换后还是原来的值
String("abc"); // "abc"
布尔值: true转为 “true”,false转为 “false”
String(true); // "true"
String(false); // "false"
undefined: 转为 “undefined”
String(undefined); // "undefined"
null: 转为 “null”
String(null); // "null"
6 对象的转换规则
6.1 先调用对象自身的toString方法。 如果返回原始类型的值, 则对该值使用String函数, 不再进行以下步骤。
String([]); // ""
String(['']); // ''
String([1]); // "1"
String([12, "a"]); // "12,a"
String({}); // "[Objec Ojbec]"
String({a: 1}); // "[Objec Ojbec]"
String({
toString(){
return 'haha';
}
}); // "haha"
6.2 如果toString方法返回的是对象, 再调用原对象的valueOf方法。 如果valueOf方法返回原始类型的值, 则对该值使用String函数, 不再进行以下步骤。
String({
toString(){
return {};
},
valueOf(){
return "{}";
}
}); // "{}"
String({
toString(){
return {};
}
}); // 报错 TypeError: Cannot convert object to primitive value
6.3 如果valueOf方法返回的是对象, 会报错。
String({
toString(){
return {};
},
valueOf(){
return {};
}
}); // 报错 TypeError: Cannot convert object to primitive value
7 使用Boolean函数,可以将任意类型的变量转为布尔值。
转换规则相对简单: 除了以下7个值(undefined, null, 0, -0, NaN, “”, false)的转换结果为false, 其他的值全部为true。
Boolean(undefined); // false
Boolean(null); // false
Boolean(0); // false
Boolean(-0); // false
Boolean(NaN); // false
Boolean(""); // false
Boolean(false); // false
注意这种情况:
Boolean(new Boolean(false)); // true
8 由于自动转换具有不确定性,而且不易除错,建议在预期为布尔值、数值、字符串的地方,全部使用Boolean、Number和String函数进行显式转换。
5 + []; // "5"
String([]); // ""
欢迎访问我的博客 Ama_zhe
--------内容系个人整理,如有错误,欢迎留言指出。谢谢!--------