成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

深入理解ES6(三)(字符串的擴展)

Steve_Wang_ / 2451人閱讀

摘要:字符串的擴展一字符串的遍歷器接口為字符串添加了遍歷器接口,使得字符串可以被循環(huán)遍歷。返回布爾值,表示參數(shù)字符串是否在源字符串的頭部。三方法返回一個新字符串,表示將原字符串重復次。如果模板字符串中的變量沒有聲明,將報錯。

字符串的擴展 一、 字符串的遍歷器接口

ES6 為字符串添加了遍歷器接口,使得字符串可以被for...of循環(huán)遍歷。

for (let codePoint of "foo") {
console.log(codePoint)
}
// "f"
// "o"
二、includes(), startsWith(), endsWith()

傳統(tǒng)上, JavaScript 只有indexOf方法,可以用來確定一個字符串是否包含在另一個字符串中。 ES6 又提供了三種新方法。

includes() :返回布爾值,表示是否找到了參數(shù)字符串。

startsWith() :返回布爾值,表示參數(shù)字符串是否在源字符串的頭部。

endsWith() :返回布爾值,表示參數(shù)字符串是否在源字符串的尾部。

var s = "Hello world!";
s.startsWith("Hello") // true
s.endsWith("!") // true
s.includes("o") // true

這三個方法都支持第二個參數(shù),表示開始搜索的位置。

var s = "Hello world!";
s.startsWith("world", 6) // true
s.endsWith("Hello", 5) // true
s.includes("Hello", 6) // false

上面代碼表示,使用第二個參數(shù)n時,endsWith的行為與其他兩個方法有所不同。它針對前n個字符,而其他兩個方法針對從第n個位置直到字符串結(jié)

束。

三、repeat()

repeat方法返回一個新字符串,表示將原字符串重復n次。

"x".repeat(3) // "xxx"
"hello".repeat(2) // "hellohello"
"na".repeat(0) // ""

參數(shù)如果是小數(shù),會被取整。

"na".repeat(2.9) // "nana"

如果repeat的參數(shù)是負數(shù)或者Infinity,會報錯

"na".repeat(Infinity)
// RangeError
"na".repeat(-1)
// RangeError

但是,如果參數(shù)是 0 到 -1 之間的小數(shù),則等同于 0 ,這是因為會先進行取整運算。 0 到 -1 之間的小數(shù),取整以后等于-0,repeat視同為 0 。

"na".repeat(-0.9) // ""

如果repeat的參數(shù)是字符串,則會先轉(zhuǎn)換成數(shù)字。

"na".repeat("na") // ""
"na".repeat("3") // "nanana"
四、模板字符串

模板字符串( template string )是增強版的字符串,用反引號( `)標識。它可以當作普通字符串使用,也可以用來定義多行字符串,或者在字符串中 嵌入變量。

//  普通字符串
`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}?`

模板字符串中嵌入變量,需要將變量名寫在${}之中。

大括號內(nèi)部可以放入任意的 JavaScript 表達式,可以進行運算,以及引用對象屬性

模板字符串之中還能調(diào)用函數(shù)。

如果大括號中的值不是字符串,將按照一般的規(guī)則轉(zhuǎn)為字符串。比如,大括號中是一個對象,將默認調(diào)用對象的toString方法。

如果模板字符串中的變量沒有聲明,將報錯。

正則的擴展

在 ES5 中, RegExp 構(gòu)造函數(shù)的參數(shù)有兩種情況

參數(shù)是字符串,這時第二個參數(shù)表示正則表達式的修飾符( flag )

var regex = new RegExp("xyz", "i");
//  等價于
var regex = /xyz/i;

參數(shù)是一個正則表示式,這時會返回一個原有正則表達式的拷貝

var regex = new RegExp(/xyz/i);
//  等價于
var regex = /xyz/i;

但是, ES5 不允許此時使用第二個參數(shù),添加修飾符,否則會報錯

var regex = new RegExp(/xyz/, "i");
// Uncaught TypeError: Cannot supply flags when constructing one RegExp from another

ES6 改變了這種行為。如果 RegExp 構(gòu)造函數(shù)第一個參數(shù)是一個正則對象,那么可以使用第二個參數(shù)指定修飾符。而且,返回的正則表達式會忽略原有的正則表達式的修飾符,只使用新指定的修飾符

new RegExp(/abc/ig, "i").flags
// "i"

flags 屬性

ES6 為正則表達式新增了flags屬性,會返回正則表達式的修飾符。

// ES5 的 source 屬性
//  返回正則表達式的正文
/abc/ig.source
// "abc"
// ES6 的 flags 屬性
//  返回正則表達式的修飾符
/abc/ig.flags
// "gi"

數(shù)值的擴展 (一)、 二進制和八進制表示法

ES6 提供了二進制和八進制數(shù)值的新的寫法,分別用前綴0b(或0B)和0o(或0O)表示。

0b111110111 === 503 // true
0o767 === 503 // true

從 ES5 開始,在嚴格模式之中,八進制就不再允許使用前綴0表示, ES6 進一步明確,要使用前綴0o表示。

//  非嚴格模式
(function(){
console.log(0o11 === 011);
})() // true
//  嚴格模式
(function(){
"use strict";
console.log(0o11 === 011);
})() // Uncaught SyntaxError: Octal literals are not allowed in strict mode.

如果要將0b和0o前綴的字符串數(shù)值轉(zhuǎn)為十進制,要使用Number方法。

Number("0b111") // 7
Number("0o10") // 8
(二)、Number.isFinite(), Number.isNaN()

ES6 在 Number 對象上,新提供了Number.isFinite()和Number.isNaN()兩個方法。

Number.isFinite()用來檢查一個數(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()用來檢查一個值是否為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ù)值,再進行判斷,而這兩個新方法只對數(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 對象上面,行為完全保持不變。

// ES5 的寫法
parseInt("12.34") // 12
parseFloat("123.45#") // 123.45
// ES6 的寫法
Number.parseInt("12.34") // 12
Number.parseFloat("123.45#") // 123.45

這樣做的目的,是逐步減少全局性方法,使得語言逐步模塊化。

Number.parseInt === parseInt // true
Number.parseFloat === parseFloat // true
(四)、 Number.isInteger()

Number.isInteger()用來判斷一個值是否為整數(shù)。需要注意的是,在 JavaScript 內(nèi)部,整數(shù)和浮點數(shù)是同樣的儲存方法,所以 3 和 3.0 被視為同一個值。

Number.isInteger(25) // true
Number.isInteger(25.0) // true
Number.isInteger(25.1) // false
Number.isInteger("15") // false
Number.isInteger(true) // false

ES6 在 Number 對象上面,新增一個極小的常量Number.EPSILON。

Number.EPSILON
// 2.220446049250313e-16
Number.EPSILON.toFixed(20)
// "0.00000000000000022204"

上篇深入理解ES6(解構(gòu))

往期經(jīng)典前端面試題JavaScript詳解

持續(xù)更新中~喜歡請留下個喜歡哦!

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/113462.html

相關(guān)文章

  • 深入理解ES6)(符串擴展

    摘要:字符串的擴展一字符串的遍歷器接口為字符串添加了遍歷器接口,使得字符串可以被循環(huán)遍歷。返回布爾值,表示參數(shù)字符串是否在源字符串的頭部。三方法返回一個新字符串,表示將原字符串重復次。如果模板字符串中的變量沒有聲明,將報錯。 字符串的擴展 一、 字符串的遍歷器接口 ES6 為字符串添加了遍歷器接口,使得字符串可以被for...of循環(huán)遍歷。 for (let codePoint of foo...

    tainzhi 評論0 收藏0
  • 深入理解ES6筆記()函數(shù)

    摘要:主要知識點有函數(shù)參數(shù)默認值剩余參數(shù)擴展運算符屬性塊級函數(shù)箭頭函數(shù)以及尾調(diào)用優(yōu)化深入理解筆記目錄函數(shù)的默認參數(shù)在中,我們給函數(shù)傳參數(shù),然后在函數(shù)體內(nèi)設(shè)置默認值,如下面這種方式。擁有方法的函數(shù)被稱為構(gòu)造器。 主要知識點有:函數(shù)參數(shù)默認值、剩余參數(shù)、擴展運算符、new.target屬性、塊級函數(shù)、箭頭函數(shù)以及尾調(diào)用優(yōu)化showImg(https://segmentfault.com/img/...

    aristark 評論0 收藏0
  • 深入理解ES6》筆記——擴展對象功能性(4)

    摘要:將對象的屬性拷貝到了對象,合并成一個新的對象。而這種行為也是新增的標準??偨Y(jié)本章講解了對象字面量語法拓展,新增方法,允許重復的對象字面量屬性,自有枚舉屬性排序,增強對象原型,明確了方法的定義。但是,就算把全部新增的功能記住也不是難事。 變量功能被加強了、函數(shù)功能被加強了,那么作為JavaScript中最普遍的對象,不加強對得起觀眾嗎? 對象類別 在ES6中,對象分為下面幾種叫法。(不需...

    baihe 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<