摘要:字符串的擴(kuò)展一字符串的遍歷器接口為字符串添加了遍歷器接口,使得字符串可以被循環(huán)遍歷。返回布爾值,表示參數(shù)字符串是否在源字符串的頭部。三方法返回一個(gè)新字符串,表示將原字符串重復(fù)次。如果模板字符串中的變量沒(méi)有聲明,將報(bào)錯(cuò)。
字符串的擴(kuò)展 一、 字符串的遍歷器接口
ES6 為字符串添加了遍歷器接口,使得字符串可以被for...of循環(huán)遍歷。
for (let codePoint of "foo") { console.log(codePoint) } // "f" // "o"二、includes(), startsWith(), endsWith()
傳統(tǒng)上, JavaScript 只有indexOf方法,可以用來(lái)確定一個(gè)字符串是否包含在另一個(gè)字符串中。 ES6 又提供了三種新方法。
includes() :返回布爾值,表示是否找到了參數(shù)字符串。
startsWith() :返回布爾值,表示參數(shù)字符串是否在源字符串的頭部。
endsWith() :返回布爾值,表示參數(shù)字符串是否在源字符串的尾部。
var s = "Hello world!"; s.startsWith("Hello") // true s.endsWith("!") // true s.includes("o") // true
這三個(gè)方法都支持第二個(gè)參數(shù),表示開(kāi)始搜索的位置。
var s = "Hello world!"; s.startsWith("world", 6) // true s.endsWith("Hello", 5) // true s.includes("Hello", 6) // false
上面代碼表示,使用第二個(gè)參數(shù)n時(shí),endsWith的行為與其他兩個(gè)方法有所不同。它針對(duì)前n個(gè)字符,而其他兩個(gè)方法針對(duì)從第n個(gè)位置直到字符串結(jié)
束。
三、repeat()repeat方法返回一個(gè)新字符串,表示將原字符串重復(fù)n次。
"x".repeat(3) // "xxx" "hello".repeat(2) // "hellohello" "na".repeat(0) // ""
參數(shù)如果是小數(shù),會(huì)被取整。
"na".repeat(2.9) // "nana"
如果repeat的參數(shù)是負(fù)數(shù)或者Infinity,會(huì)報(bào)錯(cuò)
"na".repeat(Infinity) // RangeError "na".repeat(-1) // RangeError
但是,如果參數(shù)是 0 到 -1 之間的小數(shù),則等同于 0 ,這是因?yàn)闀?huì)先進(jìn)行取整運(yùn)算。 0 到 -1 之間的小數(shù),取整以后等于-0,repeat視同為 0 。
"na".repeat(-0.9) // ""
如果repeat的參數(shù)是字符串,則會(huì)先轉(zhuǎn)換成數(shù)字。
"na".repeat("na") // "" "na".repeat("3") // "nanana"四、模板字符串
模板字符串( template string )是增強(qiáng)版的字符串,用反引號(hào)( `)標(biāo)識(shí)。它可以當(dāng)作普通字符串使用,也可以用來(lái)定義多行字符串,或者在字符串中 嵌入變量。
// 普通字符串 `In JavaScript " " is a line-feed.` // 多行字符串 `In JavaScript this is not legal.` console.log(`string text line 1 string text line 2`); // 字符串中嵌入變量 var name = "Bob", time = "today"; `Hello ${name}, how are you ${time}?`
模板字符串中嵌入變量,需要將變量名寫在${}之中。
大括號(hào)內(nèi)部可以放入任意的 JavaScript 表達(dá)式,可以進(jìn)行運(yùn)算,以及引用對(duì)象屬性
模板字符串之中還能調(diào)用函數(shù)。
如果大括號(hào)中的值不是字符串,將按照一般的規(guī)則轉(zhuǎn)為字符串。比如,大括號(hào)中是一個(gè)對(duì)象,將默認(rèn)調(diào)用對(duì)象的toString方法。
如果模板字符串中的變量沒(méi)有聲明,將報(bào)錯(cuò)。
正則的擴(kuò)展
在 ES5 中, RegExp 構(gòu)造函數(shù)的參數(shù)有兩種情況
參數(shù)是字符串,這時(shí)第二個(gè)參數(shù)表示正則表達(dá)式的修飾符( flag )
var regex = new RegExp("xyz", "i"); // 等價(jià)于 var regex = /xyz/i;
參數(shù)是一個(gè)正則表示式,這時(shí)會(huì)返回一個(gè)原有正則表達(dá)式的拷貝
var regex = new RegExp(/xyz/i); // 等價(jià)于 var regex = /xyz/i;
但是, ES5 不允許此時(shí)使用第二個(gè)參數(shù),添加修飾符,否則會(huì)報(bào)錯(cuò)
var regex = new RegExp(/xyz/, "i"); // Uncaught TypeError: Cannot supply flags when constructing one RegExp from another
ES6 改變了這種行為。如果 RegExp 構(gòu)造函數(shù)第一個(gè)參數(shù)是一個(gè)正則對(duì)象,那么可以使用第二個(gè)參數(shù)指定修飾符。而且,返回的正則表達(dá)式會(huì)忽略原有的正則表達(dá)式的修飾符,只使用新指定的修飾符
new RegExp(/abc/ig, "i").flags // "i"
flags 屬性
ES6 為正則表達(dá)式新增了flags屬性,會(huì)返回正則表達(dá)式的修飾符。
// ES5 的 source 屬性 // 返回正則表達(dá)式的正文 /abc/ig.source // "abc" // ES6 的 flags 屬性 // 返回正則表達(dá)式的修飾符 /abc/ig.flags // "gi"數(shù)值的擴(kuò)展 (一)、 二進(jìn)制和八進(jìn)制表示法
ES6 提供了二進(jìn)制和八進(jìn)制數(shù)值的新的寫法,分別用前綴0b(或0B)和0o(或0O)表示。
0b111110111 === 503 // true 0o767 === 503 // true
從 ES5 開(kāi)始,在嚴(yán)格模式之中,八進(jìn)制就不再允許使用前綴0表示, ES6 進(jìn)一步明確,要使用前綴0o表示。
// 非嚴(yán)格模式 (function(){ console.log(0o11 === 011); })() // true // 嚴(yán)格模式 (function(){ "use strict"; console.log(0o11 === 011); })() // Uncaught SyntaxError: Octal literals are not allowed in strict mode.
如果要將0b和0o前綴的字符串?dāng)?shù)值轉(zhuǎn)為十進(jìn)制,要使用Number方法。
Number("0b111") // 7 Number("0o10") // 8(二)、Number.isFinite(), Number.isNaN()
ES6 在 Number 對(duì)象上,新提供了Number.isFinite()和Number.isNaN()兩個(gè)方法。
Number.isFinite()用來(lái)檢查一個(gè)數(shù)值是否為有限的( finite )。
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()用來(lái)檢查一個(gè)值是否為NaN。
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
它們與傳統(tǒng)的全局方法isFinite()和isNaN()的區(qū)別在于,傳統(tǒng)方法先調(diào)用Number()將非數(shù)值的值轉(zhuǎn)為數(shù)值,再進(jìn)行判斷,而這兩個(gè)新方法只對(duì)數(shù)值有效,非數(shù)值一律返回false
isFinite(25) // true isFinite("25") // true Number.isFinite(25) // true Number.isFinite("25") // false isNaN(NaN) // true isNaN("NaN") // true Number.isNaN(NaN) // true Number.isNaN("NaN") // false(三)、 Number.parseInt(), Number.parseFloat()
ES6 將全局方法parseInt()和parseFloat(),移植到 Number 對(duì)象上面,行為完全保持不變。
// ES5 的寫法 parseInt("12.34") // 12 parseFloat("123.45#") // 123.45 // ES6 的寫法 Number.parseInt("12.34") // 12 Number.parseFloat("123.45#") // 123.45
這樣做的目的,是逐步減少全局性方法,使得語(yǔ)言逐步模塊化。
Number.parseInt === parseInt // true Number.parseFloat === parseFloat // true(四)、 Number.isInteger()
Number.isInteger()用來(lái)判斷一個(gè)值是否為整數(shù)。需要注意的是,在 JavaScript 內(nèi)部,整數(shù)和浮點(diǎn)數(shù)是同樣的儲(chǔ)存方法,所以 3 和 3.0 被視為同一個(gè)值。
Number.isInteger(25) // true Number.isInteger(25.0) // true Number.isInteger(25.1) // false Number.isInteger("15") // false Number.isInteger(true) // false
ES6 在 Number 對(duì)象上面,新增一個(gè)極小的常量Number.EPSILON。
Number.EPSILON // 2.220446049250313e-16 Number.EPSILON.toFixed(20) // "0.00000000000000022204"
上篇深入理解ES6(解構(gòu))
往期經(jīng)典前端面試題JavaScript詳解
持續(xù)更新中~喜歡請(qǐng)留下個(gè)喜歡哦!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/108082.html
摘要:字符串的擴(kuò)展一字符串的遍歷器接口為字符串添加了遍歷器接口,使得字符串可以被循環(huán)遍歷。返回布爾值,表示參數(shù)字符串是否在源字符串的頭部。三方法返回一個(gè)新字符串,表示將原字符串重復(fù)次。如果模板字符串中的變量沒(méi)有聲明,將報(bào)錯(cuò)。 字符串的擴(kuò)展 一、 字符串的遍歷器接口 ES6 為字符串添加了遍歷器接口,使得字符串可以被for...of循環(huán)遍歷。 for (let codePoint of foo...
摘要:主要知識(shí)點(diǎn)有函數(shù)參數(shù)默認(rèn)值剩余參數(shù)擴(kuò)展運(yùn)算符屬性塊級(jí)函數(shù)箭頭函數(shù)以及尾調(diào)用優(yōu)化深入理解筆記目錄函數(shù)的默認(rèn)參數(shù)在中,我們給函數(shù)傳參數(shù),然后在函數(shù)體內(nèi)設(shè)置默認(rèn)值,如下面這種方式。擁有方法的函數(shù)被稱為構(gòu)造器。 主要知識(shí)點(diǎn)有:函數(shù)參數(shù)默認(rèn)值、剩余參數(shù)、擴(kuò)展運(yùn)算符、new.target屬性、塊級(jí)函數(shù)、箭頭函數(shù)以及尾調(diào)用優(yōu)化showImg(https://segmentfault.com/img/...
摘要:將對(duì)象的屬性拷貝到了對(duì)象,合并成一個(gè)新的對(duì)象。而這種行為也是新增的標(biāo)準(zhǔn)。總結(jié)本章講解了對(duì)象字面量語(yǔ)法拓展,新增方法,允許重復(fù)的對(duì)象字面量屬性,自有枚舉屬性排序,增強(qiáng)對(duì)象原型,明確了方法的定義。但是,就算把全部新增的功能記住也不是難事。 變量功能被加強(qiáng)了、函數(shù)功能被加強(qiáng)了,那么作為JavaScript中最普遍的對(duì)象,不加強(qiáng)對(duì)得起觀眾嗎? 對(duì)象類別 在ES6中,對(duì)象分為下面幾種叫法。(不需...
閱讀 3635·2021-11-23 09:51
閱讀 1984·2021-11-16 11:42
閱讀 3207·2021-11-08 13:20
閱讀 1094·2019-08-30 15:55
閱讀 2200·2019-08-30 10:59
閱讀 1231·2019-08-29 14:04
閱讀 1009·2019-08-29 12:41
閱讀 1980·2019-08-26 12:22