這節課主要學習ES6中字符串和數值擴展,主要學習常用的方法。
第一部分:字符串常用方法擴展
1.includes()、startsWith()、endsWIth()
ES6之前JavaScript只有indexof()方法,可以用來確定一個字符串是否包含在另一個字符串中,indexOf()方法返回值是數字。
ES6中提供了三種新的方法:
includes: 返回布爾值,表示是否找到了參數字符串。
startsWith():返回布爾值,表示是否以參數字符串開頭。
endsWith():返回布爾值,表示是否以參數字符串結尾。
舉例:判斷字符串是否存在
let s = 'Hello world!'; s.indexOf('Hello') // 0,返回值是數字,-1表示不存在,其他表示存在 s.startsWith('Hello') // true s.endsWith('!') // true s.includes('o') // true
第二參數表示開始查找的位置,注意startsWith和endsWith()區別
let s = 'Hello world!'; s.startsWith('world', 6) // true,從頭開始計算 s.endsWith('Hello', 5) // true,從尾開始計算 s.includes('Hello', 6) // false
2.repeat()方法
repeat方法返回一個新字符串,表示將原字符串重復n次。
參數為整數:
'x'.repeat(3) // "xxx" 'hello'.repeat(2) // "hellohello" 'na'.repeat(0) //
參數為小數,正數向下取整,負數向上取整:
'na'.repeat(2.9) // "nana"
'na'.repeat(-0.9) // "" -0.9,取整結果-0,repeat認為-0相當於0
'na'.repeat(NaN) // "", NaN等同於0
參數為字符串,repeat會先使用Number將字符串轉為數字
'na'.repeat('na') // "" 'na'.repeat('3') // "nanana"
第二部分:數值的擴展
1.二進制和八進制表示法
ES6提供了二進制和八進制數值的新的寫法,分別用前綴0b(0B)和0o(0O)表示。
0b111110111 === 503 // true 0o767 === 503 // true
從ES5開始,嚴格模式中,八進制就不再允許使用前綴0表示,ES6進一步明確必須使用0o表示。
使用Number()方法將0b和0o前綴的字符串轉為十進制。
Number('0b111') // 7 Number('0o10') // 8
2.新增方法
ES6為Number對象新增了很多更方便的方法
<1>.全局方法改為Number的局部方法。
Number.isFinite():判斷一個數值是否是有限的。
注意:參數類型不是Number類型,一律返回false
Number.isFinite(15); // true Number.isFinite(0.8); // true Number.isFinite(NaN); // false Number.isFinite(Infinity); // false Number.isFinite(-Infinity); // false Number.isFinite('foo'); // false Number.isFinite('15'); // false Number.isFinite(true); // false
Number.isNaN():用來檢查一個值是否為NaN。
注意:參數類型不是NaN,一律返回false。
Number.isNaN(NaN) // true Number.isNaN(15) // false Number.isNaN('15') // false Number.isNaN(true) // false Number.isNaN(9/NaN) // true Number.isNaN('true' / 0) // true Number.isNaN('true' / 'true') // true
Number.parseInt():用來將參數轉為整數類型
Number.parseFloat():用來將參數轉為浮點數類型
注意:參數為非數值類型,首先使用Number()將其轉為數值類型,再進行轉型操作。
Number.parseInt('12.34') // 12 Number.parseFloat('123.45#') // 123.45
<2>.新增方法。
Number.isInteger():判斷一個數值是否為整數。
注意:
1.js中整數和浮點數存儲方式相同,所以15和15.0是相等的。
2.參數如果不是Number類型,一律返回false。
Number.isInteger(15) // true Number.isInteger(15.0) // true
3.Math對象的擴展
<1>Math.trunc('參數'),用於去除一個數的小數部分,返回整數部分。
注意:參數不為Number類型,Math.trunc()內部會使用Number方法將其轉成Number類型再處理。
//參數為數值類型 Math.trunc(4.1) // 4 Math.trunc(4.9) // 4 Math.trunc(-4.1) // -4 Math.trunc(-4.9) // -4 Math.trunc(-0.1234) // -0 //參數為非數值類型 Math.trunc('123.456') // 123 Math.trunc(true) //1 Math.trunc(false) // 0 Math.trunc(null) // 0
對於空值和無法截取整數的值,返回NaN。
Math.trunc(NaN); // NaN Math.trunc('foo'); // NaN Math.trunc(); // NaN Math.trunc(undefined) // NaN
<1>Math.sign('參數'),用來判斷一個數到底是正數、負數、還是零。
注意:對於參數為非數值,會先用Number處理參數再進行計算。
返回值類型:
參數為正:返回+1
參數為負:返回-1
參數為0:返回0
參數為-0:返回-0
其他值:返回NaN。
//參數為Number類型 Math.sign(-5) // -1 Math.sign(5) // +1 Math.sign(0) // +0 Math.sign(-0) // -0 Math.sign(NaN) // NaN //參數為非Number類型 Math.sign('') // 0 Math.sign(true) // +1 Math.sign(false) // 0 Math.sign(null) // 0 Math.sign('9') // +1 Math.sign('foo') // NaN Math.sign() // NaN Math.sign(undefined) // NaN