国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

ES6 舊瓶新酒

未東興 / 1192人閱讀

摘要:本文是系列的第二篇,前一篇走馬觀花概要介紹了,這一篇標題之所以叫舊瓶新酒,是想介紹那些原來就被廣泛使用的對象,例如,對這些對象擴展了一些很有用的新方法。用于監聽取消監聽數組的變化,指定回調函數。在中已被建議撤銷。

本文是 ES6 系列的第二篇,前一篇《ES6 走馬觀花》概要介紹了ES6,這一篇標題之所以叫“舊瓶新酒”,是想介紹那些原來就被廣泛使用的JS對象,例如String、Array,ES6對這些JS對象擴展了一些很有用的新方法。本文會介紹一些個人覺得很有用的方法,并不會覆蓋所有ES6新增方法。

本文將介紹以下JS對象:

String

Number

Array

Object

這里有ES6特性的兼容對比表格,方面大家查看本文提及的ES6特性在各個運行環境的兼容情況。

String Unicode 表示法

1) Unicode 表示法

JavaScript允許采用uxxxx形式表示一個字符,支持u0000—uFFFF之間的字符,對于超過uFFFF的字符,使用兩個字節的形式:

"uD842uDFB7"
// "?"

ES6 在此基礎上做了改進,引入大括號來表示一個碼點(code point)

"u{20BB7}"
// "?"

"u0041"
// "A"

"u{41}"
// "A"

除此之外,還擴展了String.prototype.codePointAt()String.fromCodePoint()方法,可以識別超出uFFFF的碼點。

2) codePointAt()

以前通過charCodeAt()獲取字符碼點,但是對超出uFFFF的雙字節字符則會出錯,只能獲取第一個字節的碼點,ES6新增了codePointAt()方法來獲取字符的unicode碼點,可以正確識別雙字節的字符。

"?".charCodeAt(0)
// 55362
"?".charCodeAt(0).toString(16)
// "d842"

"?".codePointAt(0)
// 134071
"?".codePointAt(0).toString(16)
// "20bb7"

3) String.fromCodePoint()

此方法用于從碼點返回對應字符,支持識別雙字節字符。

String.fromCodePoint(0x20bb7)
// "?"
遍歷器接口

ES6 的字符串實現了 Iterator 遍歷器接口,因此可以用 for...of 循環遍歷字符串。

for (let codePoint of "foo") {
  console.log(codePoint)
}
// "f"
// "o"
// "o"

與普通 for 循環最大的不同是,for...of 循環遍歷的單位是字符碼點(code point),而 for 循環遍歷的單位是字符單元(code unit)

var text = String.fromCodePoint(0x20BB7);

for (let i = 0; i < text.length; i++) {
  console.log(text[i]);
}
// " "
// " "

for (let i of text) {
  console.log(i);
}
// "?"
實用方法

1) includes()

以前無法直接判斷一個字符串是否另一個字符串的子字符串,只能通過indexOf()方法來判斷。

"hello world".indexOf("hello")
// 0
"hello world".indexOf("es6")
// -1

在 ES6 中可以直接使用includes()直接判斷。

"hello world".includes("hello")
// true
"hello world".includes("es6")
// false

includes() 還可以接收第二個參數,表示從第幾位開始檢索

"hello world".includes("hello", 1)
// false

2) startsWith(), endsWith()

在ES6中還可以直接判斷一個字符串是否以某個特定子串開頭,或是否以某個特定子串結尾。
以前只能用String.prototype.indexOf()RegExp.prototype.test()判斷:

"hello world".indexOf("hello")
// 0
/world$/.test("hello world")
// true

在ES6中可以這么寫

"hello world".startsWith("hello")
// true
"hello world".endsWith("world")
// true

startsWith() 和 endsWith() 還可以接收第二個參數,表示從第幾位開始檢索

"hello world".startsWith("world", 6)
// true
"hello world".endsWith("hello", 5)
// true

3) repeat()

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

"hello".repeat(2)
// "hellohello"
Number 二進制和八進制

ES6 里可以用0b前綴表示二進制,用0o表示八進制

console.log(0b1100)
// 12

console.log(0o1100)
// 576
指數運算

ES6 新增了指數運算符 **

console.log(2 ** 4)
// 16

console.log(Math.pow(2, 4))
// 16
Number.isFinite()

Number.isFinite() 與全局函數 isFinite() 的區別是,只判斷數值,所有非數值均返回false,而isFinite() 會先將非數值的值轉為數值

Number.isFinite(16)
// true
Number.isFinite("16")
// false

isFinite(16)
// true
isFinite("16")
// true

Number.isFinite(Infinity)
// false
Number.isNaN()

Number.isFinite() 類似,Number.isNaN() 值判斷數值,所有非數值均返回false

Number.isNaN(NaN)
// true
Number.isNaN("a")
// false
isNaN("a")
// true
Number.parseInt(), Number.parseFloat()

Number.parseInt(), Number.parseFloat()與全局函數parseInt(), parseFloat()作用相同,放到 Number 對象的靜態方法,目的是逐步減少全局性方法,使得語言逐步模塊化。

Number.isInteger()

Number.isInteger() 用來判斷一個值是否為整數。

Number.isInteger(16)
// true
Number.isInteger(16.2)
// false
Number.isInteger("16")
// false
Number.EPSILON

由于 Javascript 的浮點運算不是精確的,存在誤差。Number.EPSILON 表示一個極小常量,當浮點運算的誤差小于這個常量時,就認為浮點運算結果是正確的。

0.1 + 0.2
// 0.30000000000000004

0.1 + 0.2 - 0.3 < Number.EPSILON
// true
Number.isSafeInteger()

Number.isSafeInteger() 函數判斷整數是否在-2^53到2^53之間,因為JavaScript能夠準確表示的整數范圍在-2^53到2^53之間。

Number.isSafeInteger(16)
// true

Number.isSafeInteger(2 ** 54)
// false
Array Array.from()

Array.from() 用于將對象轉換為數組。
例如將字符串轉為數組:

Array.from("hello")
// ["h", "e", "l", "l", "o"]

例如將DOM的NodeList轉為數組:

var elm = document.querySelectorAll("div");
Array.from(elm).forEach(function (div) {
    // do something
});

Array.from() 函數還可以接受第二個參數,用于處理數組的每個元素。

Array.from("123", (x) => x * x)
// [1, 4, 9]
Array.of()

Array.of 用于構造一個新數組,可以取代 new Array()。因為當 new Array() 一個參數和多個參數時,行為不一致。

new Array(3)
// [ , , ]
new Array(3, 2, 1)
// [3, 2, 1]

Array.of(3)
// [3]
Array.of(3, 2, 1)
// [3, 2, 1]
Array.observe

用于監聽(取消監聽)數組的變化,指定回調函數。在ES7中已被建議撤銷。

find(), findIndex()

find() 遍歷數組直到找到符合條件的元素,返回該元素,若找不到則返回undefined。findIndex() 用法跟 find() 類似,但返回值是元素的位置,若找不到則返回-1

["hello", "world", "es6"].find(function(item) {
  if(item === "world") {
    return true;
  }
});
// "world"

[1, 0, 2].findIndex(function(item) {
  if(item === 0) {
    return true;
  }
});
// 1

find()findIndex() 還可以接收第二個參數,用于指定回調函數的 this 上下文

entries(), keys(), values()

這三個方法都返回一個遍歷器對象,用于遍歷數組。entries()用于遍歷數組鍵值對,keys()用于遍歷數組下標,values()用于遍歷數組的值。

for (let index of ["a", "b"].keys()) {
  console.log(index);
}
// 0
// 1

for (let elem of ["a", "b"].values()) {
  console.log(elem);
}
// "a"
// "b"

for (let [index, elem] of ["a", "b"].entries()) {
  console.log(index, elem);
}
// 0 "a"
// 1 "b"
Object Object 的簡潔表示法

直接寫變量

{x, y}
// 等同于
{
    x: x,
    y: y
}

直接寫函數

{
    say() {
        console.log("I am ES6");
    }
}
// 等同于
{
    say: function() {
        console.log("I am ES6");
    }
}
屬性名表達式

ES6 支持在字面量定義對象時使用表達式作為屬性名。

var world = "es6";
var obj = {
    hello: 1,
    [world]: 2
};
// {hello: 1, es6: 2}
Object.assign()

Object.assign() 方法拷貝一個對象屬性到目標對象上。

Object.assign({}, {a: 1})
// {a: 1}

Object.assign({a: 1}, {a: 2})
// {a: 2}

對于嵌套的對象,Object.assign的處理方法是替換,而不是添加。

var target = {
    a: {
        b: "hello", 
        c: "world"
    }
};
var source = {
    a: {
        b: "es6" 
    } 
};
Object.assign(target, source);
// { a: { b: "es6" } }
參考

ECMAScript 6 入門

ES6 Strings (and Unicode, ?) in Depth

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/86220.html

相關文章

  • BlockLang 頁面(設計草稿)

    摘要:我們將用戶可以看到的可以交互的前端稱為頁面。只有外觀和數據的頁面,只能稱為靜態頁面,顯然我們日常使用的更多是動態頁面,這就需要在靜態頁面上加上變的因素,我們也稱之為行為。在介紹靜態頁面往動態頁面的轉換時,需要先介紹一個重要概念驅動。 頁面 一個完整的程序模塊由一個前端頁面和多個后端服務組成,然后使用后端服務的 URL 將前端和后端關聯起來。我們將用戶可以看到的、可以交互的前端稱為頁面。...

    SwordFly 評論0 收藏0
  • 全球云服務市場格局“分野”,這三個現象值得關注

    摘要:如今,通過這面鏡子,我們也發現,市場中的各家已經逐漸分野,其中有三個現象很值得關注。數據報告顯示,阿里云已經在全球市場份額中排名第三,僅次于和微軟。5月4日晚,阿里發布了2018財年的Q4季報和全年財報,整體增勢迅猛,2018財年營收為2502.66億元,同比增長了58%。每到阿里發布財報的時候,很多人都會把目光聚焦到阿里云業務上,為什么呢?阿里云已經連續11個季度保持了三位數營收增長的紀錄...

    Seay 評論0 收藏0
  • 開始學習機器學習之前你必須要了解的知識有哪些?機器學習系列入門篇

    摘要:進入當前程序的學習系統的所有樣本稱作輸入,并組成輸入空間。結束語注意這篇文章僅僅是我接下來的機器學習系列的第一篇,后續還會有更多的內容。 往期回顧:統計學習方法第...

    leoperfect 評論0 收藏0
  • python深拷貝與淺拷貝

    摘要:之前關于的作用域賦值參數傳遞,我們接連談了幾篇文章全菊變量和菊部變量關于函數參數傳遞,人都錯了可變對象與不可變對象今天我們依然要就相關話題繼續下去。這是由于它們是不可變對象,不存在被修改的可能,所以拷貝和賦值是一樣的。 之前關于 Python 的作用域、賦值、參數傳遞,我們接連談了幾篇文章: 全菊變量和菊部變量 關于函數參數傳遞,80%人都錯了 可變對象與不可變對象 今天我們依然要...

    ideaa 評論0 收藏0
  • 使用ES6新特性開發微信小程序

    摘要:使用新特性開發微信小程序國際化與本地化新特性國際化與本地化新增了很多對于國際化的支持,比如時間格式,貨幣格式,數字格式等。 ECMAScript 6(簡稱ES6)是JavaScript語言的最新標準。因為當前版本的ES6是在2015年發布的,所以又稱ECMAScript 2015。 微信小程序支持絕大部分ES6的新增特性。 使用ES6新特性開發微信小程序(1) ES6新特性:Cons...

    Backache 評論0 收藏0

發表評論

0條評論

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