Skip to content

字符串和数组

字符串和字符串方法

字符串一般是不能修改的,只能覆盖。

.length

只读,返回字符串中字符的长度

.charAt()

只读,读取下标。因为低版本 ie 不支持下标。

.concat()

字符串拼接 .concat()或者+返回新的字符串

.indexOf()

在字符串中查询某字符是否存在
返回第一次出现的下标,不存在返回-1

javascript
let str = "asdfgh"
str.indexOf("d") //2
str.indexOf("A") //-1

.lastIndexOf()同上但返回最后一次出现的下标

javascript
let str = "大家好,我是渣渣辉"
str.lastIndexOf("辉") //8
str.lastIndexOf(",") //-1

.charCodeAt()

.charCodeAt()返回单个字符的unicode编码 和通过编码返回单个字符

javascript
let str = "银时"
str.charCodeAt(0) //38134
str.charCodeAt(1) //26102

String.fromCharCode()静态方法 回转 unicode 编码 这对于字体符号很有用

javascript
String.fromCharCode(38134, 26102)

字符串裁切

.slice()从下标哪开始,结束,可以有至少 1 个参数最多两个参数

javascript
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()字符串切割,返回一个数组。传入空字符串会以每个字符为成员返回数组

javascript
let str = "1,2,3"
let arr = str.split("") //["1",",","2",",","3"]
arr = str.split(",") //["1","2","3"] 以逗号作为分隔切分

复杂的切分方法用正则,后面讲

  • .trim() 删除字符串前面和后面的空格,返回
javascript
let str = "  asdasd   asd "
str.trim() //"asdasd   asd"

数组和数组方法

数组是一种特殊的对象:可以通过下标访问数组中的每一项,并且每一项下标从 0 开始递增,不存在的下标返回 undefined

.length

同字符串,返回数组长度

.at()

类似于 python 的 list 的下标,负数即倒着读取

.concat()

拼接数组,类似于字符串同名的方法,返回拼接的数组,原数组不变,多个参数拼接添加

javascript
let arr = [1, 2]
arr.concat(3, [4, 5], [6]) //[1,2,3,4,5,6]

.fill()

填充整个数组并返回,改变原数组并返回

javascript
let arr = [1, 2]
arr.fill(3) //[3,3]

.indexOf()

查找值类型成员,没有返回-1

javascript
;
[1, 2].indexOf(3) //-1

.lastIndexOf()同理

头尾增删

  • .push() 往数组末尾传入若干个元素,原数组改变。返回新长度。
  • .pop() 删除数组最后一个元素并返回删除的元素,原数组改变
  • .unshift() 从数组开始位置之前添加若干元素,原数组改变。返回新长度。
  • .shift() 删除数组第一个元素并返回删除的元素,原数组改变
javascript
let arr = [1, 2]
arr.push(3, 4) //4
arr.pop() //4
arr.unshift(0) //4
arr.shift() //0

.slice()

数组切片(相当于 python 的list.__getitem__

不改变原数组,返回子序列。参数:

  • 第一个:开始截取下标,负数倒着读
  • 第二个:结束截取下标,负数倒着读,不传表示到结尾

原数组不变,左闭右开

javascript
let arr = [0, 1, 2, 3, 4, 5]
arr.slice(2, 3) //[2]

.reverse()

翻转数组并返回,改变原素组

javascript
let arr = [1, 2, 3]
arr.reverse() //[3, 2, 1]
console.log(arr) //[3, 2, 1]

.join()

数组转字符串拼接,并返回,传入一个参数,拼接方法,不写默认为,

javascript
let arr = [3, 1, 2];
arr.join(); //"3,1,2"
arr.join(""); //"312"
arr.join("+"); //"3+1+2"

.splice()

数组切片赋值(相当于 python 的list.__setitem__

改变原数组 ,返回被截取的数组

接受三个参数

  • 第一个:必须,从哪个位置开始截取,负数倒着读
  • 第二个:非必须,截取长度,负数倒着读,不传就是截取完
  • 第三个及以后:非必需,在截取的位置添加。
javascript
let arr = ["原", "始", "数", "据"]
arr.splice(2, 2, "新", "的", "数", "据")

.toString()

将数组转化成字符串,类似于.join(','),不改变原数组

javascript
let arr = [1, 2, 3, 4]
arr.toString() //"1,2,3,4"

.sort()

排序,改变原数组
对数字正确排序,对字符根据每位字符排序(字典排序)
它的高级用法会在排序算法章节补充

javascript
;
[1, 4, 7, 8, 5, 2].sort() //[1, 2, 4, 5, 7, 8]
;
["s", "as", "ad"].sort() //["ad", "as", "s"]

引用类型对象和值类型对象

数据的保存类型分为两种:按存储方式分为值类型和引用类型
先说结论:只有对象为引用类型数据。其余都是值类型
引用类型有: 数组 对象 函数。
引用类型在储存的时候储存的是它的地址,在内存中只需要修改变量的引用位置

javascript
let arr1 = [],
    arr2 = []
console.log(arr1 == arr2) //false

比较这两个变量指向的地址的对象是不是同一个,所以不会相等

javascript
let a = (b = {})
b.a = 12
console.log(a) // {a:12}

自己的属性里也可以引用自身

javascript
let a = {}
a.b = a
console.log(a) //{b:{b:{...}}}

这里不会报错是因为只是建立了一个引用关系。

在函数执行前会给每个形参赋值。引用类型对象就会受到影响。