字符串和数组的操作方法

一、字符串

字符串:通过 " " 或 ' ' 都可以表示字符串,字符串就是普通的文本值,引号中可以写任意字符,引号中的字符仅代表它的字面意思,不表示其他。
字符串的属性:字符串特点与数组有些相似,字符在字符串中的排列也是有序且连续的.
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);

注意:所有的字符串操作方法都不会对调用方法的字符串产生影响,全都是生成了新的字符串。

操作方法:

  1. 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
  1. a.concat(b):将字符串b拼接到字符串a后面
var str = 'hello world';
console.log(str.concat('!'));   // hello world!
  1. str.substr(x,y):从x位置开始截取,截取长度y
var str = 'hello world';
console.log(str.substr(2,3));   // llo
  1. str.substring(x,y):从x位置开始截取,y位置结束截取,不会截取到y位置的字符。
var str = 'hello world';
console.log(str.substring(2,3));   // l
  1. str.indexOf(char):判断char是否是str中的字符,如果是得到char在str中的索引,如果不是得到-1。
var str = 'hello world';
console.log(str.indexOf('o'));    // 4
  1. str.lastIndexOf(char):与indexOf()用法相同,唯一的区别就是查找char的方向相反,lastIndexOf()是从字符串末尾向开头查找char。
var str = 'hello world';
console.log(str.lastIndexOf('o'));   // 7
  1. 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
  1. 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']
  1. 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类型,只读,表示数组元素的个数(数组长度)
操作方法:

  1. push():向数组的末尾追加元素,允许添加多个。(改变原数组)
var fruits = ['苹果', '香蕉', '橘子', '梨'];
console.log(fruits.length);   // 3
var fruits = ['苹果', '香蕉', '橘子', '梨'];
fruits.push('西瓜', '桃子');
console.log(fruits);   //  ['苹果', '香蕉', '橘子', '梨', '西瓜', '桃子']
  1. pop():删除数组末尾位置的元素(改变原数组)
var fruits = ['苹果', '香蕉', '橘子', '梨'];
fruits.pop();
console.log(fruits);  // ['苹果', '香蕉', '橘子']
  1. unshift():在数组的开头位置添加元素(改变原数组)
    注意:当向数组前面位置添加元素时,会改变原本数组中元素的索引
var fruits = ['苹果', '香蕉', '橘子', '梨'];
fruits.unshift('西瓜', '榴莲');
console.log(fruits);  // ['西瓜', '榴莲', '苹果', '香蕉', '橘子', '梨']
  1. shift():删除数组开头位置的元素(改变原数组)
var fruits = ['苹果', '香蕉', '橘子', '梨'];
fruits.shift();
console.log(fruits); // ['香蕉', '橘子', '梨']
  1. 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); //  ['狮子', '鸡']
  1. reverse():将数组中的元素反转(改变原数组)
var animal = ['老虎', '狮子', '鸡', '熊猫', '猴子'];
animal.reverse();
console.log(animal);  // ['猴子', '熊猫', '鸡', '狮子', '老虎']
  1. join():将数组元素根据参数拼接成字符串
var time = [2021, 7, 28];
var result = time.join('-');
console.log(result);  // 2021-7-28
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容