一、字符串
字符串:通过 " " 或 ' ' 都可以表示字符串,字符串就是普通的文本值,引号中可以写任意字符,引号中的字符仅代表它的字面意思,不表示其他。
字符串的属性:字符串特点与数组有些相似,字符在字符串中的排列也是有序且连续的.
length:只读属性,会得到一个number类型的值,表示字符串中字符长度(不区分中英文)
可以通过循环遍历字符(字符索引同样从0开始递增+1,最大索引是length-1)。
var str = 'hello world';
for(var i = 0;i < str.length; i++){
console.log(str[i]);
}
注意:字符串是基础数据类型,无法通过为指定下标位置重新赋值来更换字符串中的字符。(字符串的所有操作,都不是对字符串本身操作,都是对字符串的拷贝进行的操作)
var str = 'hello world';
str[1] = 'a';
console.log(str);
注意:所有的字符串操作方法都不会对调用方法的字符串产生影响,全都是生成了新的字符串。
操作方法:
- str.charAt(index):读取str中索引为index的字符
var str = 'hello world';
console.log(str); // hello world
console.log(str.charAt(1)); // e
console.log(str[1]); // e
- a.concat(b):将字符串b拼接到字符串a后面
var str = 'hello world';
console.log(str.concat('!')); // hello world!
- str.substr(x,y):从x位置开始截取,截取长度y
var str = 'hello world';
console.log(str.substr(2,3)); // llo
- str.substring(x,y):从x位置开始截取,y位置结束截取,不会截取到y位置的字符。
var str = 'hello world';
console.log(str.substring(2,3)); // l
- str.indexOf(char):判断char是否是str中的字符,如果是得到char在str中的索引,如果不是得到-1。
var str = 'hello world';
console.log(str.indexOf('o')); // 4
- str.lastIndexOf(char):与indexOf()用法相同,唯一的区别就是查找char的方向相反,lastIndexOf()是从字符串末尾向开头查找char。
var str = 'hello world';
console.log(str.lastIndexOf('o')); // 7
- str.replace(a,b):将str里面从左往右的第一个a替换成b
var str = 'hello world';
console.log(str.replace('o','a')); // hella world
字符串没有删除字符串的操作方法,如果要删除字符串中的字符,思路就是将要删除的字符替换成空字符串。
var str = 'hello world';
console.log(str.replace('h','')); // ello world
- str.split(char):将str以char为基准进行切割,切割所得的部分装进数组。
var str = 'hello world';
console.log(str.split('o').join('')); // hell wrld
console.log(str.split('')); // ['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
- str.toUpperCase():将字符串转化成大写
var str = 'hello world';
console.log(str.toUpperCase()); // HELLO WORLD
10.str.toLowerCase():将字符串转化成小写
var str = 'hello world';
console.log(str.toLowerCase()); // hello world
二、数组
数组: 属于object类型,是一个连续且有序可存储多个值的数据结构(容器)。
1、如何声明一个数组
var array = [ ]; // 声明了一个变量array,并给它赋值为空数组
console.log(array);
2、length属性,数组的length属性是一个只读属性,值是number类型,表示数组中存放数据的数量(也称数组长度)。
var books = ['三国','水浒','红楼','西游'];
console.log(books);
console.log(books.length);
3、元素与索引
元素: 数组中存储的值都称为是数组的元素。
索引:数组元素在数组中的位置用索引表示,索引是从0开始递增的整数。(元素索引值最小是:0,最大是:数组长度-1)
通过索引可以读取数组中与索引位置对应的元素的值。
console.log(books[1]);
当读取的索引值超过了索引范围(数组越界),不会报错,会得到undefined
console.log(books[100]);
同样可以通过给数组取索引赋值的形式向数组中添加元素,要注意索引的连续性。
array[0] = 1;
console.log(array);
array[10] = 11; // 不提倡
console.log(array);
可以利用for循环来遍历数组元素(依次访问)
console.log(books[0]);
console.log(books[1]);
console.log(books[2]);
console.log(books[3]);
for(var i=0;i<books.length;i++){
console.log(books[i]);
}
var n = 1;
for(var i=books.length;true;i++){
books[i] = n;
n++;
if(n == 5){break;}
}
console.log(books);
数组的赋值操作(拷贝操作)
var a = 10;
var b = a;
b ++;
number、string、boolean都属于基础数据类型,基础数据类型在进行赋值的时候,是将一个变量的值的拷贝赋值给另一个变量。
深拷贝
var a = [1];
var b = a;
b[1] = 2;
object属于引用类型,引用类型在进行赋值的时候,是将值在内存中的地址赋值给了另一个变量,因此两个变量共同指向同一个内存地址。
浅拷贝
console.log(a);
console.log(b);
// 有一个数组a
var a = [1,2,3,4,5];
// 需要你复制数组a
var b = [];
for(var i=0;i<a.length;i++){
b[i] = a[i];
}
console.log(b);
基础数据类型比较的是值(字面值)
var a = 10;
var b = 10;
console.log(a == b); // true
引用类型比较的是内存地址是否相同,并不会比较字面值。
不存在完全相同的两个对象
var a = [];
var b = [];
console.log(a == b); // false
var a = [];
var b = a;
console.log(a == b); // true
数组的属性和操作方法
属性:length, number类型,只读,表示数组元素的个数(数组长度)
操作方法:
- push():向数组的末尾追加元素,允许添加多个。(改变原数组)
var fruits = ['苹果', '香蕉', '橘子', '梨'];
console.log(fruits.length); // 3
var fruits = ['苹果', '香蕉', '橘子', '梨'];
fruits.push('西瓜', '桃子');
console.log(fruits); // ['苹果', '香蕉', '橘子', '梨', '西瓜', '桃子']
- pop():删除数组末尾位置的元素(改变原数组)
var fruits = ['苹果', '香蕉', '橘子', '梨'];
fruits.pop();
console.log(fruits); // ['苹果', '香蕉', '橘子']
- unshift():在数组的开头位置添加元素(改变原数组)
注意:当向数组前面位置添加元素时,会改变原本数组中元素的索引
var fruits = ['苹果', '香蕉', '橘子', '梨'];
fruits.unshift('西瓜', '榴莲');
console.log(fruits); // ['西瓜', '榴莲', '苹果', '香蕉', '橘子', '梨']
- shift():删除数组开头位置的元素(改变原数组)
var fruits = ['苹果', '香蕉', '橘子', '梨'];
fruits.shift();
console.log(fruits); // ['香蕉', '橘子', '梨']
- splice(x,y,z):对数组指定索引位置进行元素的添加、删除、替换。(改变原数组)
x:设置方法操作的位置
y:设置方法操作的长度
z:设置方法操作的结果或内容
(1)添加:第二个参数是0,并且有第三个参数
var fruits = ['苹果', '香蕉', '橘子', '梨'];
fruits.splice(2,0,'牛油果');
console.log(fruits); // ['苹果', '香蕉', '牛油果', '橘子', '梨']
(2)替换:第二个参数大于0,并且有第三个参数
var fruits = ['苹果', '香蕉', '橘子', '梨'];
fruits.splice(2, 2, '牛油果');
console.log(fruits); // ['苹果', '香蕉', '牛油果']
(3)删除:第二个参数大于0,并且没有第三个参数
var fruits = ['苹果', '香蕉', '橘子', '梨'];
fruits.splice(3, 1);
console.log(fruits); // ['苹果', '香蕉', '橘子']
未知长度的数组,需要将除了第一个以外的其他元素都删除
(1) 通过循环多次调用pop()
var array = [1, 2, 34, 5, 56, 6, 7];
var len = array.length - 1;
for (var i = 0; i < len; i++) {
array.pop();
}
console.log(array); // [1]
console.log(len); // 6
(2) 通过splice删除指定位置的元素
var array = [1, 2, 34, 5, 56, 6, 7];
array.splice(1, array.length - 1);
console.log(array); // [1]
6.indexOf():判断括号中的值是否是数组的元素,如果是将得到元素的索引,如果不是将得到-1。(不会影响原数组)
场景:水果列表中是否包含'牛油果'?
var fruits = ['苹果', '香蕉', '橘子', '梨'];
var result = fruits.indexOf('梨');
console.log(result); // 3
7.concat():合并多个数组(不会影响原数组)
var fruits = ['苹果', '香蕉', '橘子', '梨'];
var animal = ['老虎','狮子','鸡','熊猫','猴子'];
var result = animal.concat(fruits);
console.log(result); // ['老虎', '狮子', '鸡', '熊猫', '猴子', '苹果', '香蕉', '橘子', '梨']
var newFruit = fruits.concat([]);
console.log(newFruit === fruits); // false
8.slice():对数组进行截取(不会影响原数组)
参数:
第一个参数:设置开始截取的位置
第二个参数:设置结束截取的位置,截取内容不包含结束位置的元素。当结束位置超过数组长度,只会截取到数组末尾,不会报错。
var animal = ['老虎', '狮子', '鸡', '熊猫', '猴子'];
var result = animal.slice(1, 3);
console.log(result); // ['狮子', '鸡']
- reverse():将数组中的元素反转(改变原数组)
var animal = ['老虎', '狮子', '鸡', '熊猫', '猴子'];
animal.reverse();
console.log(animal); // ['猴子', '熊猫', '鸡', '狮子', '老虎']
- join():将数组元素根据参数拼接成字符串
var time = [2021, 7, 28];
var result = time.join('-');
console.log(result); // 2021-7-28