1. 内置对象
-
ES标准中规定的, 浏览器厂商已经实现的对象 -
包括: 11 个
String,Number,Boolean-> 包装类型Array,Date,Math,RegExpErrorFunction,ObjectGlobal-> 在浏览器中被window代替
2. 包装类型
- 什么是: 专门包装一个原始类型的值, 并提供操作原始类型值的
API - 为什么: 原始类型的值本身不具有任何功能
- 何时: 一般不会主动使用
- 只要试图用原始类型的值调用函数时, 会自动创建包装类型的对象, 调用对象的函数执行
- 操作: Ex:
n.toFixed(2)->typeof n->number=>new Number(n).toFixed(2)str.charCodeAt()->typeof str->string=>new String(str).charCodeAt()
- 为什么
null和undefined不能调用任何方法: 因为没有对应的包装类型
3. String
-
什么是: 由多个字符组成的只读字符数组
-
对比数组:
- 相同: 1. 下标 2.
length3.slice - 不同: 类型不同,
API不通用- 数组中凡是直接修改原数组的
API, 字符串都不能用
- 数组中凡是直接修改原数组的
- 相同: 1. 下标 2.
4. String API
-
强调: 所有
String API都无权修改原字符串, 只能返回新字符串
-
大小写转换
- 将字符串中所有字母, 统一转为大写 或 小写
str.toLowerCase(): 将字符串中所有字母, 统一转为 小写str.toUpperCase(): 将字符串中所有字母, 统一转为 大写- 何时: 不区分大小时
- 验证码, 用户名, 电子邮件
-
str.charAt(i): 获得指定位置的字符- 等同于
str[i]
- 等同于
-
str.charCodeAt(i): 获得指定位置字符的unicode号 -
String.fromCharCode(unicode): 将unicode号, 反向转回原文-
强调: 一次只能转一个字
-
-
获取子字符串: 3 种
str.slice(starti, end + 1): 和数组的slice用法一样str.substring(starti, endi + 1): 用法同slice, 但不支持负数str.substr(starti, n)=>str.slice(starti, starti + n)
-
查找关键词: 4 种
-
查找一个固定关键词的位置:
- 语法:
var i = str.indexOf("关键词", fromi)- 从
fromi位置开始, 找str中下一个"关键词"的位置
- 从
- 返回值: 找到的关键词的下标位置
i- 如果没找到, 返回
-1
- 如果没找到, 返回
- 简写: 省略
fromi, 默认从位置 0 开始 - 查找最后一个关键词的位置
var lasti = str.lastIndexOf("关键词")
- 问题: 只能查找一个固定关键词的位置
- 解决: 正则表达式
- 语法:
-
判断字符串中 是否包含 符合规则的关键词
- 语法:
var i = str.search(/reg/i) - 返回值: 返回关键词的位置
- 如果没找到返回
-1
- 如果没找到返回
- 问题: 正则表达式默认都是大小写敏感的
- 解决: 在第二个
/后加i, 表示忽略大小写(ignore)
- 解决: 在第二个
- 何时: 只要仅判断有没有关键词时, 首选
search - 问题:
- 只能查找一个关键词
- 只能返回位置, 无法返回关键词内容
- 语法:
-
查找所有关键词的内容
- 语法:
var kwords = str.match(/reg/ig) - 返回值: 返回所有关键词组成的数组
- 如果没找到, 返回
null
- 如果没找到, 返回
- 问题: 正则表达式默认都只匹配第一个关键词
- 解决: 在第二个
/后加g, 表示全部(global)
- 解决: 在第二个
- 何时: 仅希望获得关键词内容时
- 问题: 仅能获得内容, 无法获得每个关键词的位置
- 解决: 正则表达式
API->reg.exec(str)
- 解决: 正则表达式
- 语法:
-
替换: 将字符串中找到的关键词, 替换为指定新内容
-
简单替换: 将所有关键词都替换为统一的内容
-
语法:
str = str.replace(/reg/ig, "新值") -
Ex:
var str = "No zuo no die, No can no bibi, nothing nano" str = str.replace(/\bno\b/ig, "**") console.log(str) // ** zuo ** die, ** can ** bibi, nothing nano
-
-
高级替换: 根据每个关键词的不同, 动态选择替换不同的新值
-
语法:
str = str.replace(/reg/ig, function(kw){ kw //可自动获得本次找到的关键词 return 根据kw的不同, 动态返回不同的值 }) -
Ex:
var str = "那天,我去了她家。我说:我草,你家真大!她想和我去草地野餐。我草草的收拾了草地。她说:我去去就来" str = str.replace( /我[去草]{1,2}/ig, function(kw){ return kw.length==2 ? "**" : "***" }) console.log(str) // 那天,**了她家。我说:**,你家真大!她想和***地野餐。***的收拾了草地。她说:***就来 -
衍生: 删除 -> 将关键词替换为
""- 语法:
str = str.replace(/reg/ig, "")
- 语法:
-
-
-
切割: 按指定字符, 将一个字符串切割为多段子字符串
- 语法:
var subs = str.split(/reg/i) - 说明: 在切割后的结果数组中, 不包含切割符了
- 固定套路: 将字符串打散为字符数组
- 语法:
-