字符串和数组
字符串和字符串方法
字符串一般是不能修改的,只能覆盖。
.length
只读,返回字符串中字符的长度
.charAt()
只读,读取下标。因为低版本 ie 不支持下标。
.concat()
字符串拼接 .concat()
或者+
返回新的字符串
.indexOf()
在字符串中查询某字符是否存在
返回第一次出现的下标,不存在返回-1
let str = "asdfgh"
str.indexOf("d") //2
str.indexOf("A") //-1
.lastIndexOf()
同上但返回最后一次出现的下标
let str = "大家好,我是渣渣辉"
str.lastIndexOf("辉") //8
str.lastIndexOf(",") //-1
.charCodeAt()
.charCodeAt()
返回单个字符的unicode
编码 和通过编码返回单个字符
let str = "银时"
str.charCodeAt(0) //38134
str.charCodeAt(1) //26102
String.fromCharCode()
静态方法 回转 unicode 编码 这对于字体符号很有用
String.fromCharCode(38134, 26102)
字符串裁切
.slice()
从下标哪开始,结束,可以有至少 1 个参数最多两个参数
let str = "box-1"
let str2 = str.slice(0, 3)
//"box" 从下标0开始到下标3结束,一共3个字符,区间[0,3)
str2 = str.slice(2) //"x-1" 从第2位开始,到结束
str3 = str.slice(-1) //"1" 从最后一位开始到结束,可以是负数
.substring()
和.substr()
.substring()
接受两个参数,起始下标和结束下标(不支持负数).substr()
接受两个参数,起始下标和长度
.split()
字符串切割,返回一个数组。传入空字符串会以每个字符为成员返回数组
let str = "1,2,3"
let arr = str.split("") //["1",",","2",",","3"]
arr = str.split(",") //["1","2","3"] 以逗号作为分隔切分
复杂的切分方法用正则,后面讲
.trim()
删除字符串前面和后面的空格,返回
let str = " asdasd asd "
str.trim() //"asdasd asd"
数组和数组方法
数组是一种特殊的对象:可以通过下标访问数组中的每一项,并且每一项下标从 0 开始递增,不存在的下标返回 undefined
.length
同字符串,返回数组长度
.at()
类似于 python 的 list 的下标,负数即倒着读取
.concat()
拼接数组,类似于字符串同名的方法,返回拼接的数组,原数组不变,多个参数拼接添加
let arr = [1, 2]
arr.concat(3, [4, 5], [6]) //[1,2,3,4,5,6]
.fill()
填充整个数组并返回,改变原数组并返回
let arr = [1, 2]
arr.fill(3) //[3,3]
.indexOf()
查找值类型成员,没有返回-1
;
[1, 2].indexOf(3) //-1
.lastIndexOf()
同理
头尾增删
.push()
往数组末尾传入若干个元素,原数组改变。返回新长度。.pop()
删除数组最后一个元素并返回删除的元素,原数组改变.unshift()
从数组开始位置之前添加若干元素,原数组改变。返回新长度。.shift()
删除数组第一个元素并返回删除的元素,原数组改变
let arr = [1, 2]
arr.push(3, 4) //4
arr.pop() //4
arr.unshift(0) //4
arr.shift() //0
.slice()
数组切片(相当于 python 的list.__getitem__
)
不改变原数组,返回子序列。参数:
- 第一个:开始截取下标,负数倒着读
- 第二个:结束截取下标,负数倒着读,不传表示到结尾
原数组不变,左闭右开
let arr = [0, 1, 2, 3, 4, 5]
arr.slice(2, 3) //[2]
.reverse()
翻转数组并返回,改变原素组
let arr = [1, 2, 3]
arr.reverse() //[3, 2, 1]
console.log(arr) //[3, 2, 1]
.join()
数组转字符串拼接,并返回,传入一个参数,拼接方法,不写默认为,
let arr = [3, 1, 2];
arr.join(); //"3,1,2"
arr.join(""); //"312"
arr.join("+"); //"3+1+2"
.splice()
数组切片赋值(相当于 python 的list.__setitem__
)
改变原数组 ,返回被截取的数组
接受三个参数
- 第一个:必须,从哪个位置开始截取,负数倒着读
- 第二个:非必须,截取长度,负数倒着读,不传就是截取完
- 第三个及以后:非必需,在截取的位置添加。
let arr = ["原", "始", "数", "据"]
arr.splice(2, 2, "新", "的", "数", "据")
.toString()
将数组转化成字符串,类似于.join(',')
,不改变原数组
let arr = [1, 2, 3, 4]
arr.toString() //"1,2,3,4"
.sort()
排序,改变原数组
对数字正确排序,对字符根据每位字符排序(字典排序)
它的高级用法会在排序算法章节补充
;
[1, 4, 7, 8, 5, 2].sort() //[1, 2, 4, 5, 7, 8]
;
["s", "as", "ad"].sort() //["ad", "as", "s"]
引用类型对象和值类型对象
数据的保存类型分为两种:按存储方式分为值类型和引用类型
先说结论:只有对象为引用类型数据。其余都是值类型
引用类型有: 数组 对象 函数。
引用类型在储存的时候储存的是它的地址,在内存中只需要修改变量的引用位置
let arr1 = [],
arr2 = []
console.log(arr1 == arr2) //false
比较这两个变量指向的地址的对象是不是同一个,所以不会相等
let a = (b = {})
b.a = 12
console.log(a) // {a:12}
自己的属性里也可以引用自身
let a = {}
a.b = a
console.log(a) //{b:{b:{...}}}
这里不会报错是因为只是建立了一个引用关系。
在函数执行前会给每个形参赋值。引用类型对象就会受到影响。