天天看點

JS——直接指派和引用指派、數組對象的使用方法及注意事項

一、直接指派和引用指派

1.直接指派:

let str = "aaa";
let str2 = str;//這裡是直接指派
str2 = "aaa222";
console.log(str);//輸出aaa
console.log(str2);//輸出aaa222
           

2.引用指派:

引用指派主要是數組跟對象的變量之間的指派。

let arr=['1','2','3'];//數組
let arr2 = arr;//這裡是引用指派
arr2[0] = '2';
console.log(arr);//輸出2,2,3
console.log(arr2);//輸出2,2,3
           
let obj =[
         {name:'xiaoming',age:'18'},
         {name:'hong',age:'11'}
     	];
     let obj2 = obj;//這裡是引用指派
     obj2[0].name = 'huahua';
     console.log(obj);//輸出...{name:'hong',age:'11'}
     console.log(obj2);//輸出...{name:'hong',age:'11'}
           

是以,字元串中使用直接指派不用擔心,但是到了數組和對象變量(我覺得像python裡的字典),就要注意引用的改變了。

二、數組對象的使用方法:

let arr = ['牛奶', '可樂'];
arr[arr.length-1] = '雪碧';
           

其實這樣就替換了 ‘可樂’。

2.push()

let arr = ['牛奶', '可樂'];
let w = arr.push('奶茶', '紅牛');
           

在arr數組末尾添加新的元素。w傳回值就是新數組的長度4。

3.pop()

結果就是去掉數組最後一個元素。

4.splice()

let arr = ['0茶顔悅色','1喜茶','2優茶'];
let g2 = arr.splice(0,3,'哇哈哈哈','達利園','江小白');
console.log(arr);
           

輸出的就是’哇哈哈哈’,‘達利園’,‘江小白’,0就是要替換的數組下标,3就是從下标0開始,包括0在内往後3個元素被代替。

其實 也可以做插入,比如這樣寫:

也就是從下标0開始,插入3個元素。

5.reverse()

let arr = ['0茶顔悅色','1喜茶','2優茶'];
arr.reverse();
           

這就是反轉方法,輸出結果就是:‘2優茶’,‘1喜茶’,‘0茶顔悅色’。這個方法很好用,隻要是數組,裡面都能頭尾反轉。

6.substr()、slice()

let str = 'abcdef';
let str2 = str.substr(1,3);//輸出bcd,就是截取下标1,2,3的元素
console.log(str2);
let str3 = str.slice(1,3);//輸出bc,就是截取下标1,2的元素
console.log(str3);
           

嗯~,就是截取一段元素。他們的差別,看上面輸出結果就知道了,我就不寫了。

7.jon()

let arr3 = [2020, 09, 24]
let date = arr3.join('-');
console.log(date);//輸出2020-09-24
           

就是使用指定的字元串連接配接起所有數組。

8.split()

let names = '小明,小紅,小白';
let arr4 = names.split(",");
console.log(arr4)//輸出[小明,小紅,小白]
           

它的作用就是把字元串names以’,‘作為分隔符,把分隔後的内容放入數組中變成元素。

現在可以根據split、reverse、join寫一個讓字元串倒序的函數:

function re(str){
    let arr = str.split("");//先把字元串拆開變成數組
    arr.reverse();//再把數組反轉
    return arr.join("");//再把數組間的逗号去掉,連接配接成字元串
}
           

9.sort

解釋:使用指定方法對數組中的元素進行排序。其基本準則是:如果傳回值小于0,則元素位置不動;如果大于0,則元素位置互相調換。

具體看個例子:這是一個将arr中的元素分别是:1按年齡升/10降序排列、2按号碼升/20降序排列、3按年齡降序,如果年齡相同則按号碼大的優先。由使用者輸入選擇。我重點是為了介紹sort的作用。

let arr = [
    {name:"alex", age:18, sex:"man", num:"10"},
    {name:"sky", age:17, sex:"man", num:"101"},
    {name:"hsike", age:28, sex:"man", num:"2"},
    {name:"rose", age:28, sex:"women", num:"20"},
    {name:"roy", age:5, sex:"man", num:"16"},
    {name:"mary", age:5, sex:"man", num:"18"},
    ];
    let input = '';
    input = prompt("請輸入排序方式編号:(1年齡升序)——(10年齡降序)——(2号碼升序)——(20号碼降序)——(3年齡+号碼降序)");

    switch( input){
        case '1': arr.sort((x,y)=>{
        return x.age - y.age;//前一個人的年齡18,減去後一個人的年齡17,大于0,是以他們互換位置,是以17就在18的上面,也就滿足年齡升序
        });break;
        case '10': arr.sort((x,y)=>{return y.age - x.age;});break;
        case '2': arr.sort((x,y)=>{return x.num - y.num;});break;
        case '20': arr.sort((x,y)=>{return y.num - x.num;});break;
        case '3': arr.sort((x,y)=>{
            if(x.age==y.age){//如果年齡相同則比較号碼
                return y.num - x.num;//後一個号碼20減去前一個号碼2,為正數,是以調換hsike和rose,把号碼大的rose移至前面
            }
            return y.age - x.age;
            });break;
        default:console.log("輸入錯誤!");break;
    }
    for(let i=0; i<arr.length; i++){
        document.write("姓名:"+arr[i].name+",年齡:"+arr[i].age+",性别:"+arr[i].sex+",号碼:"+arr[i].num+"</br>");
    }
           

輸出結果就是:

姓名:roy,年齡:5,性别:man,号碼:16

姓名:mary,年齡:5,性别:man,号碼:18

姓名:sky,年齡:17,性别:man,号碼:101

姓名:alex,年齡:18,性别:man,号碼:10

姓名:hsike,年齡:28,性别:man,号碼:2

姓名:rose,年齡:28,性别:women,号碼:20

繼續閱讀