一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情。
今天的学习主题是字符串,刷力扣总是记不住里面的逻辑,总结就是基础不劳,每次想到一个解决方案,就是不理解对应的内容。
字符串,也是基础中的基础,记录一下学习收获!补充一些字符串的面试题目,做为提升!
学习链接
zh.javascript.info/string - 《现代Javascript教程》 - 字符串
学习内容
简介
字符串内部格式是UTF-16,文本数据,都是以字符串的形式存储的。
字符串的类型有三种
- 单引号
- 双引号
- 反引号
其中,单引号和双引号不能混合使用,及一个单一个双,而且不能同时出现两个双引号,两个单引号,要交替使用!
反引号,相较于单引号和双引号,出现较晚,能更好的结合当前的编程需要,它可以通过${…},将表达式嵌入到字符串中,可以在其中使用变量,函数等,还可以让字符串跨行显示!
特殊字符,字符串中具有特殊规则的字符,可以实现换行,退格,进制,其他特殊字符的效果!
这个反斜杠称为 - “转义字符”
完整的表!
字符串属性
通过length属性 - 可以表示字符串长度,
这里用的是属性,而不是方法,str.length
访问字符串中的变量,有两种方法
[pos]方括号 - 下标str.charAt(pos)- api - 注!开始要记api了!留一个位置汇总一下!
如果用[] 返回undefined,如果用api,返回空字符串
它们之间的唯一区别是,如果没有找到字符,
[]返回undefined,而charAt返回一个空字符串:
也可以用for of遍历字符 - 同数组!
字符串是不可变的
如果做拼接操作,字符串,每次都会创建一个新的空间,就会很慢!
查找子字符串
这里是做题的关键了!!如何取值,找数据! - 子字符串
str.indexOf(substr, pos),
- 从pos位置,找substr,找不到返回-1,找到返回匹配到的位置
- 只找第一出现的位置
- 想找全部,用循环 + 改变pos位置! - pos + 1
str.indexOf出现的问题! - 找到的位置,在0,但是它在判断条件中,找到了但是条件不成立!
解决办法,看它 是不是不出现。。。找不到就是-1
按位(bitwise)NOT技巧
~ 运算符 - 整数 + 二进制取反!~n = -(n + 1)
它将数字转换为 32-bit 整数(如果存在小数部分,则删除小数部分),然后对其二进制表示形式中的所有位均取反。 -------- 对于 32-bit 整数,
~n等于-(n+1)。
作者原话!!!
通常不建议以非显而易见的方式使用语言特性,但这种特殊技巧在旧代码中仍被广泛使用,所以我们应该理解它。
includes,startsWith,endsWith
- includes - 检测匹配,不需要位置,找到就是true
- startsWith - 是否以改字符串开头 - 可用于匹配数据!!比如某接口返回数据
- endWith - 是否以改字符串结尾!! - 可用于匹配数据!!
获取子字符串
最记不得的地方了!!
- substring
- substr
- str.slice
str.slice(start, end)
- 获取start,到end 的字符串,不包括end位置
- 没有第二个参数,直接到结尾 - 可以用于整体复制
- start 和end可以是负值,从最后一个开始,最后一位是 -1
str.substring(start, end)
- 和slice几乎相同
- 支持start 大于end。。。。返回空字符串
- 不支持负值
- 感觉还是slice厉害啊。。。。
str.substr(start, length)
- 不是从哪到哪了,从开始,之后多少个,截取!
- start可以是负的,
比较字符串
- str.codePointAt(pos) - 字母转 数字
- str.fromCodePoint(code) - 数字转 字母
- str.localeCompare(str2) - 专门用于比较字符串大小的!
这里的前后,指的是在字符串排序表中的位置,
str在str2 前面 - 小,返回负值
str在str2 后面 - 大,返回正的
str和str2 相同,返回0
其他
- 代理对 - 一些特殊字符串,占用两个子节,如表情包🤣🤣🤣
常用api
str.charAt(pos)- 访问字符串的某一位toLowerCase()- 都改小写 - 不考虑大小写的时候,就统一把字母转换!!toUpperCase()- 都该大写str.indexOf(substr, pos)- 查找子字符串!includes,startsWith,endsWith- 查找字符串 - 包含,头,尾str.substring- 截取字符串str.slice- 截取字符串str.substr- 截取字符串 - 长度str.codePointAt(pos)- 获取改位置的字符代码 - a - 97 - 返回97!!str.localeCompare(str2)
面试题目
juejin.cn/post/703564… - # 字符串--常见面试题 - 掘金
- 解析 URL Params 为对象
- 模版引擎实现
- 转化为驼峰命名
- 查找字符串中出现最多的字符和个数
- 字符串查找 - api
- 实现千位分割符 - 以下正则
- 判断是否是电话号码
- 验证是否是邮箱
- 验证是否是身份证
好像都还不会。。。
总结
第一次发文,也是迈出了第一步了😋!目前在实习了,上半年规划,毕设早日完成啊!!!下半年,嗯,继续加油!!!
总有人会在某个地方等你,在那之前你要努力❤❤❤