引入:JavaScript中关于字符串的便捷操作
JavaScript中的运算符有==
、===
、!=
、!==
、>
、<
、+
、-
、*
、/
等
当两个操作数类型不同时,大部分运算符会自动执行类型转换,统一类型以进行后续操作
+
运算符:将数字(或布尔值)转换为字符串
+
运算符只要遇到字符串,会执行字符拼接(Concatenation),结果一定为字符串
3+"1"结果为"31"
1+1+"9"+1+1结果为"2911"
true+"love"结果为"truelove"
true+"1"结果为"true1"
true+1+"1"结果为"21"
注意:1+1+"9"+1+1结果为"2911"
,true+1+"1"结果为"21"
,因为+
的结合性是从左到右的
技巧:用
number
生成字符串时,无需用number
的toString()
方法,而是利用+
的拼接特性:
var str=num+"";
结果为一个字符串
-
、*
、/
运算符:将字符串(或布尔值)转化为数字
-
、*
、/
运算符遇到字符串,认为要执行的是算数运算,结果一定为数字
3*"1"结果为3
80/"10"结果为10
"0"-true结果为-1
false-true结果为-1
那么,JavaScript是如何实现这样的便捷操作的呢?
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
基本类型和对象
JavaScript中,类型分为两种:基本类型和对象,不属于基本类型的值都是对象
- 基本类型:数字
number
、字符串string
、布尔值boolean
、null
和undefined
- 特殊的类型:对象
object
类型(用于表示问题空间中的事物)
在一些情况下,基本类型也如同对象被暂时转换为对象进行处理:
使用基本类型string
的属性或方法时(如split
、substring
、contact
等),JavaScript将把它暂时转换为对象,使用指定的属性或方法,再将其转换为基本类型字符串。这个过程是自动进行的,程序员无需关注。ps.
number
、boolean
类型(有toString
等方法)也有类似的转化;
字符串简介
- JavaScript没有单个字符
char
,单个字符也作为一个字符串string
- 字符串可以用双引号
""
也可以用单引号''
表示
字符串:既像基本类型string
,又像对象object
在JavaScript中:
-
可创建作为基本类型的字符串(
string
) -
也可(使用对象构造函数)创建作为对象的字符串(
object
),支持大量的字符串操作方法
var str=new String();
console.log(typeof(str));//结果为object
- 但在大多数情况下,无需显式地这样做,因为JavaScript解释器会在需要时自动创建字符串对象
如何跟踪字符串当前是基本类型还是对象呢?
- 不需要这样做,一般将字符串视为对象就好(其中包含大量帮助操作字符串的方法)
而JavaScript会负责处理所有的细节 - 可以随时用
typeof
判断当前字符串是string
还是object
常用字符串方法和属性简介
属性length
属性length
返回字符串长度
方法charAt()
:获取某个位置的字符
传入一个整数index,返回单个字符string[index](以字符串形式)
传入的索引index不存在时,返回空字符串""
方法indefOf()
:查找子串
传入一个字符str,返回字符串中str首次出现的位置
可以传入第二个参数index,指定开始查找的位置
lastIndexOf()
功能类似,但是是从后向前查找子串
如果没有找到str,返回-1
方法match()
:查找与正则表达式匹配的子串
传入正则表达式RegExp,查找与其匹配的所有子串,返回数组(该数组的内容依赖于RegExp是否具有全局标志g)
当没有找到匹配的子串时,返回null
null
是一个假值,因此可以这样判断字符串是否匹配特定的模式
function validate(phoneNumber){//匹配模式ddd-dddd或ddddddd
return phoneNumber.match(/^\d{3}-?\d{4}$/);
}
正则表达式详见 Javascript学习笔记——正则表达式
方法substring()
:提取子串
传入整数index1、index2,返回索引之间的子串
可以省略第二个参数,这时默认index2在字符串末尾
方法split()
:用分隔符将字符串分为多个部分
传入要作为分隔符的字符c
,由此分割字符串,返回一个数组
var data = "name|phone|address";
var vals = data.split("|");
console.log("Split array is ",vals);
输出为"Split array is ["name","phone","address"]"
注意这里用逗号分隔两个实参,防止vals被转为字符串
技巧:反转字符串
由于数组有一个reverse
方法,而字符串没有,因此可以这样操作:
str=str.split("").reverse().join("");
拆为数组,反转,再合成字符串
更多方法
concat()
拼接字符串
replace()
将特定的子串替换为另一个字符串
slice()
删除字符串的一部分
trim()
修剪字符串开头和末尾的空格,便于处理
toLowerCase()
所有大写转小写
toUpperCase()
所有小写转大写