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