所有 JavaScript 数据类型都有 valueOf() 和 toString() 方法。
String
字符串属性
length
:返回字符串的长度。
字符串方法
所有字符串方法都会返回新字符串。它们不会修改原始字符串。
查找字符串中的字符
indexof()
返回字符串中指定文本首次出现的位置
lastIndexof()
返回字符串中指定文本最后一次出现的位置
如果未找到文本,indexOf()
和 lastIndexOf()
均返回 -1。两种方法都接受第二个参数(非负值)作为检索的开始位置。
search()
返回字符串中指定文本首次出现的位置
search()
无法设置第二个参数作为检索的开始位置。indexof()
无法设置更强大的正则表达式。
提取部分字符串
提取[start,end)部分
slice(start,end)
substring(start,end)
substr(start,length)
区别:substring()
无法接受负的索引。substr()
第二个参数是提取字符串的长度。
替换字符串内容
replace()
默认replace() 只替换首个匹配。默认 replace() 对大小写敏感。
let str = "tom is toms";
console.log(str.replace("tom", "bob"));
转换为大写和小写
toUpperCase() 把字符串转换为大写:
toLowerCase() 把字符串转换为小写:
concat() 方法
连接两个或多个字符串:
let str1 = "hello";
let str2 = "world";
console.log(str1.concat(" ", str2)); //hello world
trim() 方法
删除字符串两端的空白符。
提取字符串字符
charAt(position)
返回字符串中指定下标(位置)的字符:
charCodeAt(position)
返回字符串中指定索引的字符 unicode 编码
var str = "HELLO WORLD";
str.charAt(0); // 返回 H
str.charCodeAt(0); // 返回 72
属性访问
var str = "HELLO WORLD";
str[0]; // 返回 H
属性访问有问题,不推荐使用:
如果找不到字符,[ ] 返回 undefined
,而 charAt()
返回空字符串。
它是只读的。str\[0] = "A"
不会产生错误(但也不会工作!)
如果希望按照数组的方式处理字符串,可以先把它转换为数组。
split()
把字符串转换为数组
如果省略分隔符,被返回的数组将包含 index [0] 中的整个字符串。
如果分隔符是 "",被返回的数组将是间隔单个字符的数组:
let txt = "a,b,c,d";
console.log(txt.split(",")); //[ 'a', 'b', 'c', 'd' ]
console.log(txt.split(" ")); //[ 'a,b,c,d' ]
console.log(txt.split("|")); //[ 'a,b,c,d' ]
console.log(txt.split("")); //['a', ',', 'b',',', 'c', ',','d']
Number
- JavaScript 数值始终是 64 位的浮点数
- 超大或超小的数可通过科学计数法来写
let x = 123e5; // 12300000
let y = 123e-5; // 0.00123
- 精度:整数15位,小数17位。
-
Infinity
(或-Infinity
)
除以 0(零)也会生成 Infinity:
数值属性
属性 | 描述 |
---|---|
MAX_VALUE | 返回 JavaScript 中可能的最大数。 |
MIN_VALUE | 返回 JavaScript 中可能的最小数。 |
NaN | 非数值 |
NEGATIVE_INFINITY | 表示负的无穷大(溢出返回)。 |
POSITIVE_INFINITY | 表示无穷大(溢出返回)。 |
数值方法
toString()
以字符串返回数值。返回值类型为string
let x = 123;
console.log(x.toString()); //123
console.log("123".toString()); //123
console.log((120 + 3)); //123
把数输出为十六进制、八进制或二进制。
var myNumber = 128;
myNumber.toString(16); // 返回 80
myNumber.toString(8); // 返回 200
myNumber.toString(2); // 返回 10000000
toExponential()
返回字符串值,它包含已被四舍五入并使用指数计数法的数字。参数定义小数点后的字符数:
let x = 9.656;
x.toExponential(2); // 返回 9.66e+0
x.toExponential(4); // 返回 9.6560e+0
x.toExponential(6); // 返回 9.656000e+0
toFixed()
返回字符串值,它包含了指定位数小数的数字。
var x = 9.656;
x.toFixed(0); // 返回 10
x.toFixed(2); // 返回 9.66
x.toFixed(4); // 返回 9.6560
x.toFixed(6); // 返回 9.656000
toPrecision()
返回字符串值,它包含了指定长度的数字。四舍五入
var x = 9.656;
x.toPrecision(); // 返回 9.656
x.toPrecision(2); // 返回 9.7
x.toPrecision(4); // 返回 9.656
x.toPrecision(6); // 返回 9.65600
valueOf()
以数值返回数值
var x = 123;
x.valueOf(); // 从变量 x 返回 123
(123).valueOf(); // 从文本 123 返回 123
(100 + 23).valueOf(); // 从表达式 100 + 23 返回 123
把变量转换为数值
这些方法并非数字方法,而是全局 JavaScript 方法。
Number() 方法
Number() 可用于把 JavaScript 变量转换为数值,如果无法转换数字,则返回 NaN。
parseInt() 方法
解析一段字符串并返回数值。允许空格。只返回首个数字。
parseInt("10"); // 返回 10
parseInt("10.33"); // 返回 10
parseInt("10 20 30"); // 返回 10
parseInt("10 years"); // 返回 10
parseInt("years 10"); // 返回 NaN
parseFloat() 方法
解析一段字符串并返回数值。允许空格。只返回首个数字。
parseFloat("10"); // 返回 10
parseFloat("10.33"); // 返回 10.33
parseFloat("10 20 30"); // 返回 10
parseFloat("10 years"); // 返回 10
parseFloat("years 10"); // 返回 NaN
RegExp
语法:
/正则表达式主体/修饰符(可选)
方法
字符串方法
- search()
用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置。
let str = "This is a code. Write By Pillar";
let n = str.search(/code/i);
console.log(n);//10
- replace()
用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
let str = "This is a code. Write By Pillar";
let n = str.replace("code", "word");
console.log(n);//This is a word. Write By Pillar
RegExp 方法
- test()
用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false。
let str = "This is a code. Write By Pillar";
let reg = /code/;
console.log(reg.test(str));//true
- exec()
该函数返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。
let str = "This is a code. Write By Pillar";
let reg = /code/;
console.log(reg.exec(str));
/*[
'code',
index: 10,
input: 'This is a code. Write By Pillar',
groups: undefined
]
*/
修饰符
修饰符 | 描述 |
---|---|
i | 执行对大小写不敏感的匹配。 |
g | 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。 |
m | 执行多行匹配。 |
模式
- 方括号用于查找某个范围内的字符:
表达式 | 描述 |
---|---|
[abc] | 查找方括号之间的任何字符。 |
[0-9] | 查找任何从 0 至 9 的数字。 |
(x l y) | 查找任何以 l 分隔的选项。 |
- 元字符是拥有特殊含义的字符:
元字符 | 描述 | 元字符 | 描述 |
---|---|---|---|
d | 查找数字 | D | 非数字 |
s | 查找空白字符 | S | 非空白字符 |
w | 数字字母下划线 | W | 非数字字母下划线 |
b | 匹配单词边界 | . | 任意字符 |
l | 或 | [^] | 取反 |
^ | 正则表达式开始匹配的位置 | $ | 结束的位置 |
uxxxx | 查找以十六进制数 xxxx 规定的 Unicode 字符。 |
- 量词
量词 | 描述 |
---|---|
n+ | 匹配任何包含一个或多个 n 的字符串。 |
n* | 匹配任何包含零个或多个 n 的字符串。 |
n? | 匹配任何包含零个或一个 n 的字符串。 |
X{n} | 出现n次X |
X{n,} | 至少出现n次X |
X{n,m} | 至少出现n次,最多出现m次X |
应用
邮箱的正则表达式:
^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$
手写字符串trim方法
String.prototype.trim = function (){
return this.replace(/^\s+/,'').replace(/\s+$/,'')
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。