iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 6
0
Modern Web

小白的JavaScript讀書日記系列 第 6

Day6:基本資料操作-內建物件(一)

  • 分享至 

  • xImage
  •  

Day5的練習答案:
Try1:
由於const是常數,沒辦法更改,但可以選擇用重寫的方式

const data = [3,4,6];
data[0] = 1;
data[1] = 2;
data[2] = 3;

以上就可以將data陣列從3,4,6換成1,2,3且不會報錯。

Try2:
console.log(1=='1'); //true;==比較運算子中,不會判斷型別。
console.log(1==='1'); //false;===比較運算子中會判斷型別。

Try3:
x = (1 == '1') && (1 === '1'); //false
y = (1 != '1') || (10 === '10'); //false
z = !(1 === '1'); //true

Try4:

for(let i = 10; i>=1; i--){
    console.log(i);
}

以上~讓我們開始進入今天的內容吧!




內建物件

Day4我們了解了物件的基本概念,再JavaScript中提供了一些"內建物件"讓我們來使用,以下為大家介紹。

String物件 - 字串處理

String物件是用以處理字串型別的包裹物件,提供字串的擷取、加工、搜尋...等功能,下面介紹幾個比較常用的。

  • length:取得字串長度。
let str = "gdsgdfsgjsdfgdfsegsdfgdfsg"
console.log(str.length); //得到:26

透過上述例子可以發現,str這個變數裡有一堆字元,我們可以一個一個用數的數出有幾個字元,當然也可以透過length這個內建的方法直接算出有多少個字元。

  • indexOf():
    判斷字串中是否包含某個字串,是的話從左至右計算出(字串)的索引值。
    寫法如下:str.indexOf(searchValue[, fromIndex])
    searchValue:表是你要搜尋的字串。
    fromIndex:表示從第幾個開始算,預設為0。
let str = 'My name is Ben';
console.log(str.indexOf('a')); //得到:4
console.log(str.inddexOf('z'); //得到:-1,當搜尋不到時,會回傳-1

在這個例子中要注意的是My和name中間有一個空白,會被計算進去,
所以得到的是4而不是3。

  • lastIndexOf():
    基本與indexOf一樣,但再字串中有兩個值是一樣的時候,會取最靠近右邊的那個。
let str = "'My name is Ben';
console.log(str.indexOf('e'));   //結果:6
console.log(str.lastIndexOf('e')); //結果:12
  • slice():
    從字串中,指定位置,並擷取出部分字串
//我想取出name
let str = "My name is Ben";
console.log(str.slice(3,7))

上述例子可以觀察到,是從第三個索引值開始(包含第三個),到第七個索引值以內的,所以會取出name。
Try1:取出Ben,應該怎麼下指令?

  • split():
    將字串分割,並取的陣列的結果。
let str = "a,b,c,d,e,f"
console.log(str[1]); //結果:,
let arr2 = str.split(",")
console.log(arr2[1]) //結果:b

上述例子可以發現,原本str的索引值[1]是逗號,
當我們將str的逗號分割後,得到的結果就會是b。
p.s.可以自己試看看arr[0]是什麼呢

  • replace():
    將字串中將指定的字元替換掉。
let str = "My name is Ben";
console.log(str.replace('Ben', 'Bill')); //結果:My name is Bill

這邊要注意的是,如果替換的字串有兩個以上,只會替換掉第一個(從左邊數過來)。

let str = "Javascript and Javascript are hard to learn!";
console.log(str.replace('Javascript', 'C#'));
// 結果:C# and Javascript are hard to learn!

由上述例子可以發現,第一個Javascript被重新賦值成C#,但第二個沒有。

  • toUpperCase():
    將字串轉換成大寫。
let str = "My name is Ben";
let str2 = str.toUpperCase();
console.log(str2);
//結果:MY NAME IS BEN
  • toLowerCase():
    將字串轉換成小寫。
let str = "My name is Ben";
let str2 = str.toLowerCase();
console.log(str2);
//結果:my name is ben

以上是一些比較常用的方法,當然還有其他,想了解的可以參考w3c的網站:
https://www.w3schools.com/js/js_string_methods.asp

Number物件 - 處理數值

JavaScript提供了一些方法,讓我們可以處理數值,以下介紹幾種較常用的。

  • toString():
    將數值轉換成字串
let num = 123;
//轉型前的型別
console.log(typeof (num)); //結果:number

//轉型後的型別
let num1 = num.toString();
console.log(typeof (num1)); //結果:string
  • toFixed():
    取小數點幾位
let num = 3.1415926;
console.log(num.toFixed(2)); //結果:3.14
  • parseInt
    將字串轉換成整數
let num = "3345678";
console.log(typeof (num)); //結果:string

//將字串轉換成整數後
let num1 = parseInt(num);
console.log(typeof (num1)); //結果:number

以上是一些比較常用的方法,當然還有其他,想了解的可以參考w3c的網站:
https://www.w3schools.com/js/js_number_methods.asp

Math物件 - 執行基本的數學運算

惡司胎頭,JavaScript也提供了一些基本的數學運算

  • Math.max():
    回傳()內最大的值
console.log(Math.max(10, 20, 30)); //結果:30
  • Math.min():
    回傳()內最小的值
console.log(Math.min(10, 20, 30)); //結果:10
  • Math.abs(x):
    將x轉換成絕對值
console.log(Math.abs(-3.14)); //結果:3.14
  • Math.pow(x,y):
    計算x是y的次方
console.log(Math.pow(2, 4)); //結果:16

上述例子表示,2的4次方=16。

  • Math.sqrt(x):
    計算x的平方根
console.log(Math.sqrt(25)); //結果:5
  • Math.ceil():
    無條件進入
console.log(Math.ceil(3.14)); //結果:4
  • Math.floor():
    無條件捨去
console.log(Math.floor(3.14)); //結果:3
  • Math.round():
    四捨五入
console.log(Math.round(3.14)); //結果:3
console.log(Math.round(3.5)); //結果:4
  • Math.trunc():
    捨去小數位
console.log(Math.trunc(3.14)); //結果:3
console.log(Math.trunc(3.5)); //結果:3
  • Math.random()*(x):
    取x值以內的亂數,如果沒有x值,則取0~1以內的亂數(> 0 && < 1)
// 結果:得到 >0  <1 的數值
console.log(Math.random());
// 結果:得到 >10 <10的數值
console.log(Math.random() * 10);

以上是一些Math提供的方法,以下也附上w3c的網站,裡面還有其他的方法可以參考。
https://www.w3schools.com/js/js_math.asp

Try2:
透過上面所學包含String,Number,Math提供的方法,請用Math.random在console印出1~10的亂數(顯示的數值不包含小數點)。



Array/Map/Set - 管理及操作值

JavaScript提供了Array,Map,Set物件,其中Map和Set是在ES6才有的。
以下介紹三種的差異:

  • Array:索引值管理,值(value)可以重複。
  • Map:將鍵與值是為同一組管理,鍵不能重複。
  • Set:值沒有順序,值不能重複。

Array

是一種操作陣列型態值的物件,前面使用過很多次了,這邊附上w3c的連結,裡面有完整的介紹。
https://www.w3schools.com/jsref/jsref_obj_array.asp

Map

Map物件每組元素都有對應的值,也就是關聯陣列的物件,我們直接看程式碼。

//宣告一個Map的物件
let data = new Map();
//用set 將值 新增進去
let data = new Map();
// 使用 set 將 值 新增進去data
data.set('Ben','boy');
data.set('Mary','girl');
data.set('Kevin','male');
//p.s.這邊也可以寫成 let data = new Map([['Ben','boy'],['Mary','girl'],['Kevin','male']])

/*這邊介紹一些Map提供的方法*/ 
//size: 取得 data 的元素有幾個
console.log(data.size); // 3

//get(key):透過 key 取得 value
console.log(data.get('Mary')); // girl

//has(key):透過key檢查元素是否存在
console.log(data.has('Bill')); //false

//key():依序取得所有的key
for (let key of data.keys()){
    console.log(key);
} // Ben,Mary,Kevin


//value():依序取得所有的value
for(let value of data.values()){
    console.log(value);
} //boy,girl,male

//delet():刪除 key Ben
data.delete('Ben');
console.log(data.size); // 2 因為Ben被刪除了,所以只剩兩個元素

//clear():刪除全部
data.clear();
console.log(data.size); // 0 清除全部元素。

Set

Set物件是用管理唯一值集合的物件,因此若重複加入的會自動被忽略。

//宣告一個Set物件
let num = new Set();
//使用add新增值
num.add(10);
num.add(1);
num.add(80);
num.add(40);
num.add(10);

//也可以寫成這樣let num = new Set([10,1,80,40,10]);
console.log(num.size); //4 如果有重複的會自動被忽略!

Set提供的方法基本上與Map的大同小異,但要注意的是Set物件中,有重複的值是會自動被忽略的(只計算一次)。




今日總結

  • 內建物建:String、Number、Math所提供的方法以及應用。
  • Array / Map / Set 三種的差異性,以及使用方法。
  • Try1:
    //使用slice() 取出 Ben
    let str = "My name is Ben";
  • Try2:
    //用Math.random印出1~10的亂數(顯示的值不包含小數點)

今天就到這裡,需要調整一下寫文章的步調,不然估計每天時間不夠用...
我們明天見!


上一篇
Day5:基本語法(三)
下一篇
Day7:基本資料操作-內建物件(二)
系列文
小白的JavaScript讀書日記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
fillano
iT邦超人 1 級 ‧ 2020-09-08 11:59:35

標題有錯字喔...

q20038848 iT邦新手 5 級 ‧ 2020-09-08 12:12:20 檢舉

感謝大大提醒Q_Q

我要留言

立即登入留言