← 返回目录

字符串

第 75 / 154 卷日期:

隔开就好了。

对于 Function.prototype.apply 来说,Function.apply( obj,args ) 方法能接收两个参数,obj:是 this 的指向对象。而 args:这个是数组,它将作为参数传递,也就是说 apply 的所有参数都必须放在一个数组里面

传进去对于 Function.prototype.bind 来说,第一个参数就是 this 的指向对象,其余参数是直接放进去,用逗号

隔开就好了。也就是说他和 call 是基本相同的,除了是返回是一个函数。

注意对于 bind 来说,多次的 bind 调用,this的指向仍然是第一次的

function aa() { console.log(this)

} aa.bind(1).bind(2)() // 1

二、bind / call / apply 的异同

相同:都能改变 this 的指向,都是挂载在 Function. prototype 上不同:call 和 apply 是使用后马上执行,而 bind 是返回一个新的函数,调用显函数才会执行目标函数。并且 call

和 bind 的参数格式是一样的,第一个参数是 this 的指向对象,其余参数用逗号,apply 是参数需要放到数组中。

总结

关于修改 this 的指向的方法有三个, bind 和 call 以及 apply,他们的相同点都是能修改 this 的指向的问题的,并且都是挂载在 Function.prototype 上的。

不同点在于参数和执行上,call 和 bind 的参数格式是一样的,第一个参数是 this 的指向对象,其余参数用逗号,而 apply 的参数需要放到数组中。在执行中,call 和 apply 是使用后马上执行,而 bind 是返回一个新的函数,调

用显函数才会执行目标函数。

其中需要注意的是,箭头函数的 this 是指向他所在的上下文中,并且是不能使用这三个方法修改的。

字符串

String方法

charAt(index): 返回指定索引处的字符串,若没找着,返回空 charCodeAt(index): 返回指定索引处的字符的 Unicode 值

// toLowerCase()转换成小写 toUpperCase()转换成大写

var x = "a".toLowerCase().charCodeAt(0)

//x = 97

concat(str1, str2, ... ): 连接多个字符串,返回连接后字符串副本,纯函数(和数组一样的用法)

fromCharCode(): 将 Unicode 值转换成实际字符串

// 返回"a"

indexOf(str): 返回 str 在父串中第一次出现的位置,若没有返回-1 lastIndexOf(str): 返回 str 在父串中最后一次出现的位置,若没有返回-1

match(regex): 搜索字符串,返回正则表达式的所有匹配 search(regex): 基于正则表达式搜索字符串,返回第一个匹配的位置

slice(start, end):返回字符索引在 start 和 end(不含)之间的子串 split(sep,limit):将字符串分割为字符数组,limit 为从头开始执行分割的最大数量

substr(start,length):从字符索引 start 的位置开始,返回长度为 length 的子串 substring(from, to):返回字符索引在 from 和 to(不含)之间的子串,和slice几乎相同,但它允许

from>to,不支持负参数 toLowerCase():将字符串转换为小写

toUpperCase():将字符串转换为大写 valueOf():返回原始字符串值

toString() 把Number 对象转换为字符串,返回结果

{} 的 valueOf 结果为 {},toString 的结果为 "[object Object]"

[] 的 valueOf 结果为 [],toString 的结果为 ""

str.codePointAt(pos)返回pos位置的字符编码

// 不同的字⺟有不同的代码

alert( "z".codePointAt(0) ); // 122

alert( "Z".codePointAt(0) ); // 90

String.fromCodePoint(code)通过code创建字符

alert( String.fromCodePoint(90) ); // Z

//\u后跟十六进制代码,通过代码添加Unicode字符

// 在十六进制系统中 90 为 5a

alert( '\u005a' ); // Z

'a'>'Z'

因为字符通过数字代码比较,a(97)>Z(90)

// 英文是否大写

function upperCase(num) {

return reg.test(num);

}

replace

不会修改原字符串!

第二个参数传入要替换的目标字符串,replace只会匹配一次

第二个参数也可传入一个函数,若原始字符串中有n个我们查找的字符串,函数就会执行n次,且函数返回一个字符串,来替换每次匹配到的字符串

参数

$&

$& 适用于没有子表达式的情况

var sStr='讨论一下正则表达式中的replace的用法';

sStr.replace(/正则表达式/,'《$&》');

// 得到:"讨论一下《正则表达式》中的replace的用法"

$`

匹配字符串左边的所有字符

var sStr='讨论一下正则表达式中的replace的用法';

sStr.replace(/正则表达式/,'《$`》');

// 得到:"讨论一下《讨论一下》中的replace的用法"

$'

匹配字符串右边的所有字符

var sStr='讨论一下正则表达式中的replace的用法';

sStr.replace(/正则表达式/,"《$'》");

// 得到:"讨论一下《中的replace的用法》中的replace的用法"

1,2,3,4……n

依次匹配子表达式

sStr.replace(/(正则)(.+?)(式)/,"《$1》$2<$3>");

// 得到:"讨论一下《正则》表达<式>中的replace的用法"

函数

var sStr='讨论一下正则表达式中的replace的用法';

sStr.replace(/(正则).+?(式)/,function() {

console.log(arguments);

});

// ["正则表达式", "正则", "式", 4, "讨论一下正则表达式中的replace的用法"]

参数分别为

匹配到的字符串若正则使用了分组匹配就是多个,否则无此参数

匹配字符串的索引位置原始字符串

arguments是当前函数的内置属性,指代当前匹配的参数伪数组。

或者使用命名形参的方式:

var sStr='讨论一下正则表达式中的replace的正则表达式用法';

sStr.replace(/(正则).+?(式)/g,function($1) {

console.log($1);

return $1 + 'a';

});

用法

str = str.replace(/\s*/g); //去除字符串内所有的空格 \s匹配任何空白字符。(空格,制表符,换行符)

str = str.replace(/^\s*|\s*$/g, "");//去除字符串内首尾空格

str = str.replace(/^\s*/, "");//去除字符串左侧空格

let a=name.replace(/(\w+)\s*, \s*(\w+)/, "$2 $1");

console.log(a)

//John Doe

//首字⺟大写

let name = 'aaa bbb ccc';

let uw=name.replace(/\b\w+\b/g, function(word){

return word.substring(0,1).toUpperCase()+word.substring(1);}

);

str.trim()

trim()删除字符串两端的空白字符并返回,不影响原来字符串本身,**返回一个新的字符串**

缺陷:只能去除字符串两端的空格,不能去除中间的空格

截取字符串

substring()

substring()用于提取字符串中介于两个指定下标之间的字符

substring(start,stop)

start:一个非负整数,指要提取的子串的第一个字符在字符串中的位置,必需填写 stop:一个非负整数,比要提取的子串的最后一个字符在字符串上的位置多 1,可写可不写,如果不写则返回

的子串会一直到字符串的结尾

该字符串的长度为stop-start

如果参数 start 与 stop 相等,则该方法返回的就是一个空串,如果 start 比 stop 大,那么该方法在提取子串之前会先交换这两个参数

substr()

substr()在字符串中抽取从 start 下标开始的指定数目的字符

substr(start,length)

start:要截取的子串的起始下标,必须是数值。如果是负数,那么该参数从字符串的尾部开始算起的位置。

也就是说,-1 指字符串中最后一个字符,-2 指倒数第二个字符,以此类推,必需要写 length:子串中的字符数,必须是数值。如果不填该参数,返回字符串的开始位置到结尾的字符。如果length

为0 或者负数,将返回一个空字符串

全站分卷索引 · 154 卷
  1. 1代码随想录知识星球精华(最强八股文)第五版(前端篇))
  2. 2html语义化
  3. 3src 和 href 的区别
  4. 4link 与 @import 的区别
  5. 5iframe
  6. 6CSS
  7. 7伪元素和伪类
  8. 8block,inline,inline-block
  9. 9重排、重绘和合成
  10. 10盒子模型
  11. 11margin 合并
  12. 12margin和padding 的值为百分比时
  13. 13浮动
  14. 14定位
  15. 15CSS选择器
  16. 16CSS选择器优先级
  17. 17选择器权重Specificity
  18. 18CSS属性继承
  19. 19不可/可继承属性
  20. 20display: none与 visibility: hidden的区别
  21. 21background-size
  22. 22client、offset&scroll
  23. 23CSS3新特性
  24. 24flex布局
  25. 25常见布局
  26. 26三栏布局
  27. 27垂直居中
  28. 28水平垂直居中
  29. 29CSS画三角形
  30. 30使chrome支持12px以下文字
  31. 31响应式布局
  32. 32媒体查询
  33. 33过渡与动画
  34. 34JavaScript 动画 和 CSS动画
  35. 35SCSS
  36. 36CSS性能优化
  37. 37有哪些数据类型
  38. 38判断数据类型
  39. 39类型转换
  40. 40parseInt&parseFloat
  41. 41浮点数求和步骤
  42. 42十进制小数转二进制
  43. 430.1+0.2 为什么不等于 0.3
  44. 44undefined 和 undeclared 的区别
  45. 45JavaScript NaN 属性
  46. 46isFinite()&isNaN()
  47. 47数组
  48. 48对原数组有影响
  49. 49对原数组无影响
  50. 50数组去重
  51. 51数组拍平
  52. 52ES6新增的数组方法
  53. 53判断是否存在某个值
  54. 54arguments为啥不是数组
  55. 55对象
  56. 56遍历对象的方法
  57. 57判断对象是否具有属性
  58. 58for in 和 for of 的区别
  59. 59继承方式
  60. 60instanceof
  61. 61深浅拷贝
  62. 62freeze属性
  63. 63函数
  64. 64函数柯里化
  65. 65函数的 length
  66. 66箭头函数和普通函数区别
  67. 67构造函数
  68. 68执行上下文
  69. 69作用域
  70. 70作用域和作用域链
  71. 71闭包和内存泄漏
  72. 72this
  73. 73关于 this 的指向问题
  74. 74改变this指向的方法(bind / call / apply)
  75. 75字符串
  76. 76DOM和事件
  77. 77哪些事件支持冒泡
  78. 78阻止冒泡
  79. 79HTMLCollection、NodeList
  80. 80dom.onclick 和 dom.addEventListener的区别
  81. 81e.target和e.currentTarget
  82. 82页面生命周期
  83. 83异步
  84. 84内存管理GC
  85. 85其它
  86. 86JavaScript 中日期时间格式转换
  87. 87input和object实现双向绑定
  88. 88JSON.stringify()
  89. 89escape、encodeURI&encodeURIComponent
  90. 90移动端滚动穿透和溢出
  91. 91ES6
  92. 92Map字典
  93. 93... 与rest
  94. 94proxy
  95. 95模块化
  96. 96Ajax、Fetch和Axios
  97. 97Webpack
  98. 98浏览器:事件循环
  99. 99浏览器内核
  100. 100浏览器同源策略
  101. 101输入URL回车后发生了什么
  102. 102HTTP
  103. 103HTTP 2.0
  104. 104浏览器存储
  105. 105鉴权
  106. 106Webstorage
  107. 107浏览器执行机制
  108. 108AST 抽象语法树
  109. 109性能优化
  110. 110CSS
  111. 111网络相关
  112. 112使用HTTP2.0
  113. 113图片
  114. 114CDN图片
  115. 115其他文件优化
  116. 116降低APP首页开屏渲染时间
  117. 117页面白屏
  118. 118HTTPS中间人攻击
  119. 119Web Worker
  120. 120Service Worker
  121. 121微前端
  122. 122Vue
  123. 123v-show 和 v-if 的区别
  124. 124双向数据绑定的原理
  125. 125Vue中的插槽使用
  126. 126Vue中的key
  127. 127Vue过滤器
  128. 128Vue中Scoped原理
  129. 129Vue中$nextTick的使用
  130. 130Vue中实现组件通信的方式
  131. 131Vue-router
  132. 132Vue路由传参
  133. 133前端路由
  134. 134Vuex
  135. 135虚拟DOM
  136. 136DIFF 算法
  137. 137Vue3和Vue2有哪些区别
  138. 138说一说你对React的理解
  139. 139React事件机制
  140. 140说一说你对react refs的理解
  141. 141react中key的作用
  142. 142组件开发
  143. 143有状态组件和无状态组件
  144. 144函数式组件和类组件的区别
  145. 145PureComponent&Component
  146. 146常见 Hooks
  147. 147状态管理
  148. 148redux toolkit
  149. 149React18新特性
  150. 150client中的createRoot取代以前的ReactDOM.render
  151. 151Suspense
  152. 152新的Hooks
  153. 153VDom一定更快吗
  154. 154Fiber