现代Javascript教程 - 学习笔记01 - 字符串

201 阅读4分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情

今天的学习主题是字符串,刷力扣总是记不住里面的逻辑,总结就是基础不劳,每次想到一个解决方案,就是不理解对应的内容。

字符串,也是基础中的基础,记录一下学习收获!补充一些字符串的面试题目,做为提升!

学习链接

zh.javascript.info/string - 《现代Javascript教程》 - 字符串

学习内容

简介

字符串内部格式是UTF-16,文本数据,都是以字符串的形式存储的。

字符串的类型有三种

  • 单引号
  • 双引号
  • 反引号

其中,单引号和双引号不能混合使用,及一个单一个双,而且不能同时出现两个双引号,两个单引号,要交替使用!

反引号,相较于单引号和双引号,出现较晚,能更好的结合当前的编程需要,它可以通过${…},将表达式嵌入到字符串中,可以在其中使用变量,函数等,还可以让字符串跨行显示!

特殊字符,字符串中具有特殊规则的字符,可以实现换行,退格,进制,其他特殊字符的效果!

这个反斜杠称为 - “转义字符”

完整的表! image.png

字符串属性

通过length属性 - 可以表示字符串长度,

这里用的是属性,而不是方法,str.length

访问字符串中的变量,有两种方法

  • [pos]方括号 - 下标
  • str.charAt(pos) - api - 注!开始要记api了!留一个位置汇总一下!

如果用[] 返回undefined,如果用api,返回空字符串

它们之间的唯一区别是,如果没有找到字符,[] 返回 undefined,而 charAt 返回一个空字符串:

也可以用for of遍历字符 - 同数组!

字符串是不可变的

image.png

如果做拼接操作,字符串,每次都会创建一个新的空间,就会很慢!

查找子字符串

这里是做题的关键了!!如何取值,找数据! - 子字符串

str.indexOf(substr, pos),

  • 从pos位置,找substr,找不到返回-1,找到返回匹配到的位置
  • 只找第一出现的位置
  • 想找全部,用循环 + 改变pos位置! - pos + 1

str.indexOf出现的问题! - 找到的位置,在0,但是它在判断条件中,找到了但是条件不成立!

解决办法,看它 是不是不出现。。。找不到就是-1

image.png

按位(bitwise)NOT技巧

~ 运算符 - 整数 + 二进制取反!~n = -(n + 1)

它将数字转换为 32-bit 整数(如果存在小数部分,则删除小数部分),然后对其二进制表示形式中的所有位均取反。 -------- 对于 32-bit 整数,~n 等于 -(n+1)

image.png

image.png

作者原话!!!

通常不建议以非显而易见的方式使用语言特性,但这种特殊技巧在旧代码中仍被广泛使用,所以我们应该理解它。

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厉害啊。。。。

image.png

str.substr(start, length)

  • 不是从哪到哪了,从开始,之后多少个,截取!
  • start可以是负的,

image.png

比较字符串

  • str.codePointAt(pos) - 字母转 数字
  • str.fromCodePoint(code) - 数字转 字母
  • str.localeCompare(str2) - 专门用于比较字符串大小的!

这里的前后,指的是在字符串排序表中的位置,

str在str2 前面 - 小,返回负值

str在str2 后面 - 大,返回正的

str和str2 相同,返回0

image.png

其他

  • 代理对 - 一些特殊字符串,占用两个子节,如表情包🤣🤣🤣

常用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
  • 实现千位分割符 - 以下正则
  • 判断是否是电话号码
  • 验证是否是邮箱
  • 验证是否是身份证

好像都还不会。。。

总结

第一次发文,也是迈出了第一步了😋!目前在实习了,上半年规划,毕设早日完成啊!!!下半年,嗯,继续加油!!!

总有人会在某个地方等你,在那之前你要努力❤❤❤