关注返回值, 是否改变原数组,传参…
-
String是引用数据类型,
-
string 和 array 都能用但是注意
let str = 'abc';
str.indexOf('') // 0
includes('a', n)
startWith('a', n)
endWith('a', n)
都有的方法/属性
1. slice(index1, index2) 裁切 含头不含尾
2. indexOf(val, start) '' ''
3. includes('') // ''.includes('') true 开始觉得挺bug的, 后面觉得符合预期, 空集是任何集合的子集, 哪怕是空集
4. concat() 拼接, 返回拼接后的值, 但是String 通常不用 直接用 + 或者模板字符串了``
5. valueOf() 不知道有啥用
Array.isArray()判断数组
互转
str.split('').reverse().join('') // 字符串分割成数组=>逆序=>合成字符串
split('', 1) // 限制了数组长度
arr.toString()
// 字符串转数组, 过滤假值, 再映射(转数字)
let str = '1,2,3'
str.split(',').filter(i => i).map(i => +i)
str = ''
str.split(',') // [ '' ];
改变原数组的8方法(其余的都是不改变原数组的)
const arr = ['a','b','c']
arr.push(1, 2) // 5 返回新的数组的长度...莫名其妙的
arr.pop() // 2 返回取出的这最后一项
arr.unshift('0') // 5
arr.shift() // '0'
sort() // 排序
splice() // 粘接
reverse()
fill(value, start, end) //
splice 删除,插入,替换
let arr = ['a', 'b', 'c'];
arr.splice('eee', 1) // 'a'
arr.splice(undefined, 1) // 'a'
arr.splice(false, 1) // 'a'
arr.splice(true, 1) // 'b'
arr.splice([0], 1) // 'a'
应该是会用Number() 转数字, 转不成就默认 0
arr.splice(-1) // ['c']
arr.splice(1) // ['b', 'c']
类数组转数组
Array.prototype.solice.call(arguments) // 原理???
Array.from(arguments)
其他方法
Array.isArray(x) // 判断是否是数组
forEach() 遍历, 数组的这些遍历方法**不能通过break 中断. return 也会被忽略**
reduce()
some()
every()
前端是做什么的? 在合适的时机, 发合适的请求, 获取数据(处理数据),展示到合适的地方. string是常用的基本数据类型,可见很重要.
- 除了null和undefined都有toString方法
- '2019-09-08’日期格式的字符串可以直接比较大小. 返回布尔值
字符串模板
Unicode 表示法; U+2028…
原来没模板字符串要这样
var longString = 'Long '
+ 'long '
+ 'long '
+ 'string';
现在只要下面这样, 想换行就换行,想用表达式放${}里面
let longString = `Long
long
${表达式}
long
String
`
es6新增的string方法
1. includes 包含 (空串会返回0 , indexOf也是)
2. startWith endWith, 比如验证文件名. 'abc.pdf'.endsWith('.pdf', 1)
3. <font color=orange>repeat(100) </font>
4. padStart(10, 'a')
5. replaceAll('b','-')
6. at(1) // 0 -1
不知道为啥能用下标取了还搞个at?
let str = 'abc';
str[1] // 'b'
str.at(1) // 'b'
str[3] // undefined
str.at(3) //undefined
es6 之前的string方法
toLowerCase()
const str = 'abc'
str.split('', length) // 拆成数组, length限制长度 join() join('') 可以接正则
String() // 强转字符串
str.slice(1, 3) // 比 substring好 substring()传负值会转0 substr截取几个 substr(index, count)废弃了, 不要用
trim()
toLowerCase() // Upper toLocalLowerCase toLocalUpperCase 带了local的相对跟稳妥.
toUpperCase()
concat() 拼接, 不如 + 如果不是字符串会转 ''.concat(a, b, c)
charAt // 为啥不用index?
charCodeAt() // 获取ASCII码
可搭配正则的()
split(//)也可以
'abc'.search('a') // 0 search()返回索引
match() // 用得最多匹配方法match() 相当于正则的exec()方法 返回一个数组,
replace() // replace(/a/g, 'b') ???特殊的字符序列 $$ $& $` $' $n $nn, replace(//, function( match, pos, originalText) {})
replace
let zml = `
<h1>zml</h1>
<span>张明乐</span>
<h2>33</h2>
`
// [\s\S] 代表所有字符 \1代表前面的 h[1-6]
let reg = /<(h[1-6])>([\s\S]+)<\/\1>/gi
let res = zml.replace(reg, (p0, p1, p2) => {
return `<p>${p2}</p>`
})
console.log(res)
matchAll()
返回迭代器
var s = "zhangmingle";
var reg = /n/g
const arr = []
let res = s.matchAll(reg)
let res2 = s.matchAll('n')
console.log(res2);
for (let i of res) {
console.log(i);
}
btoa(encodeURIComponent(str)); // 非ASCII码字符转为Base64编码
decodeURIComponent(atob(str))