91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

es6增強的功能有哪些

發布時間:2022-11-21 16:18:10 來源:億速云 閱讀:100 作者:iii 欄目:web開發

本篇內容介紹了“es6增強的功能有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

es6增強的功能:1、解構賦值,允許按照一定的模式,從數組或對象中提取值,給變量進行賦值。2、為字符串添加了遍歷器接口,使得字符串可以被"for…of循環遍歷。3、模板字符串,是增強版的字符串。4、標簽模板,是函數調用的一種特殊形式。5、為函數的參數設置默認值。6、箭頭函數的this指向上級作用域。7、允許在大括號里面,直接寫入變量和函數,作為對象的屬性和方法。

ES6對原有的語法進行增強

1,解構賦值

es6允許按照一定的模式,從數組或對象中提取值,給變量進行賦值,稱為解構賦值。

解構賦值在代碼書寫上簡單易懂,語義清晰明了,方便對復雜對象中數據字段的獲取。

在解構中,解構的源,位于解構賦值表達式的右邊,而解構的目標,在解構表達式的左邊。

(1),數組的解構賦值

ES6 允許按照一定模式,從數組和對象中提取值,對變量進行賦值,這被稱為解構。

let [foo, [[bar], baz]] = [1, [[2], 3]];
foo // 1
bar // 2
baz // 3

let [ , , third] = ["foo", "bar", "baz"];
third // "baz"

let [x, , y] = [1, 2, 3];
x // 1
y // 3

let [head, ...tail] = [1, 2, 3, 4];
head // 1
tail // [2, 3, 4]

let [x, y, ...z] = ['a'];
x // "a"
y // undefined
z // []

本質上,這種寫法屬于“模式匹配”,只要等號兩邊的模式相同,左邊的變量就會被賦予對應的值。
解構不成功,值會等于undefined。另一種情況是不完全解構,即等號左邊的模式,只匹配一部分的等號右邊的數組。這種情況下,解構依然可以成功。

對于 Set 結構,也可以使用數組的解構賦值。

let [x, y, z] = new Set(['a', 'b', 'c']);
x // "a"

  • 解構賦值允許指定默認值。

let [foo = true] = [];
foo // true
let [x, y = 'b'] = ['a']; // x='a', y='b'
let [x, y = 'b'] = ['a', undefined]; // x='a', y='b'
let [x = 1] = [null];x // null

注意,ES6 內部使用嚴格相等運算符(===),判斷一個位置是否有值。所以,只有當一個數組成員嚴格等于undefined,默認值才會生效。如果一個數組成員是null,默認值就不會生效,因為null不嚴格等于undefined。

function f() {
  console.log('aaa');
}
let [x = f()] = [1];

上面代碼中,因為x能取到值,所以函數f根本不會執行。上面的代碼其實等價于下面的代碼。

(2),對象的解構賦值

對象的解構與數組有一個重要的不同。數組的元素是按次序排列的,變量的取值由它的位置決定;而對象的屬性沒有次序,變量必須與屬性同名,才能取到正確的值。

let { bar, foo } = { foo: 'aaa', bar: 'bbb' };
foo // "aaa"
bar // "bbb"
let { baz } = { foo: 'aaa', bar: 'bbb' };
baz // undefined

對象的解構賦值,可以很方便地將現有對象的方法,賦值到某個變量。

// 例一
let { log, sin, cos } = Math;

// 例二
const { log } = console;
log('hello') // hello

上面代碼的例一將Math對象的對數、正弦、余弦三個方法,賦值到對應的變量上,使用起來就會方便很多。例二將console.log賦值到log變量。

let { foo: baz } = { foo: 'aaa', bar: 'bbb' };
baz // "aaa"
foo // error: foo is not defined

上面代碼中,foo是匹配的模式,baz才是變量。真正被賦值的是變量baz,而不是模式foo。

對象的解構賦值的內部機制,是先找到同名屬性,然后再賦給對應的變量。真正被賦值的是后者,而不是前者。

與數組一樣,解構也可以用于嵌套結構的對象。

let obj = {
  p: [
    'Hello',
    { y: 'World' }
  ]
};

let { p: [x, { y }] } = obj;
x // "Hello"
y // "World"

默認值

對象的解構也可以指定默認值。

var {x = 3} = {x: undefined};
x // 3

var {x = 3} = {x: null};
x // null

(3),字符串的解構賦值

類似數組的對象都有一個length屬性,因此還可以對這個屬性解構賦值。

let {length : len} = 'hello';
len // 5

(4)數值和布爾值的解構賦值

解構賦值時,如果等號右邊是數值和布爾值,則會先轉為對象。

let {toString: s} = 123;
s === Number.prototype.toString // true

let {toString: s} = true;
s === Boolean.prototype.toString // true

(5),函數參數的解構賦值

function add([x, y]){
  return x + y;
}

add([1, 2]); // 3

(6),用途

1)交換變量的值

let x = 1;
let y = 2;
[x, y] = [y, x];

2)從函數返回多個值
函數只能返回一個值,如果要返回多個值,只能將它們放在數組或對象里返回。有了解構賦值,取出這些值就非常方便。

// 返回一個數組

function example() {
  return [1, 2, 3];
}
let [a, b, c] = example();

// 返回一個對象

function example() {
  return {
    foo: 1,
    bar: 2
  };
}
let { foo, bar } = example();

3)函數參數的定義
解構賦值可以方便地將一組參數與變量名對應起來。

// 參數是一組有次序的值
function f([x, y, z]) { ... }
f([1, 2, 3]);

// 參數是一組無次序的值
function f({x, y, z}) { ... }
f({z: 3, y: 2, x: 1});

4)提取 JSON 數據
解構賦值對提取 JSON 對象中的數據,尤其有用。

let jsonData = {
  id: 42,
  status: "OK",
  data: [867, 5309]
};

let { id, status, data: number } = jsonData;

console.log(id, status, number);
// 42, "OK", [867, 5309]

5)遍歷 Map 結構
任何部署了 Iterator 接口的對象,都可以用for…of循環遍歷。Map 結構原生支持 Iterator 接口,配合變量的解構賦值,獲取鍵名和鍵值就非常方便。

const map = new Map();
map.set('first', 'hello');
map.set('second', 'world');

for (let [key, value] of map) {
  console.log(key + " is " + value);
}
// first is hello
// second is world

如果只想獲取鍵名,或者只想獲取鍵值,可以寫成下面這樣。

// 獲取鍵名
for (let [key] of map) {
  // ...
}
// 獲取鍵值
for (let [,value] of map) {
  // ...
}

2,字符串的增強

ES6 加強了對 Unicode 的支持,允許采用\uxxxx形式表示一個字符,其中xxxx表示字符的 Unicode 碼點。

"\uD842\uDFB7"
// "?"
"\u20BB7"
// " 7"

ES6 對這一點做出了改進,只要將碼點放入大括號,就能正確解讀該字符。

(1)字符串的遍歷器接口

ES6 為字符串添加了遍歷器接口,使得字符串可以被for…of循環遍歷。

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

(2)模板字符串

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

// 普通字符串
`In JavaScript '\n' is a line-feed.`

// 多行字符串
`In JavaScript this is
 not legal.`

console.log(`string text line 1
string text line 2`);

// 字符串中嵌入變量
let name = "Bob", time = "today";
`Hello ${name}, how are you ${time}?`

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

let x = 1;
let y = 2;

`${x} + ${y} = ${x + y}`
// "1 + 2 = 3"

`${x} + ${y * 2} = ${x + y * 2}`
// "1 + 4 = 5"

let obj = {x: 1, y: 2};
`${obj.x + obj.y}`
// "3"

模板字符串之中還能調用函數。如果大括號中的值不是字符串,將按照一般的規則轉為字符串。比如,大括號中是一個對象,將默認調用對象的toString方法。

function fn() {
  return "Hello World";
}

`foo ${fn()} bar`
// foo Hello World bar

字符串的新增方法

1,String.fromCodePoint()
ES5 提供String.fromCharCode()方法,用于從 Unicode 碼點返回對應字符,但是這個方法不能識別碼點大于0xFFFF的字符。

2,String.raw()
ES6 還為原生的 String 對象,提供了一個raw()方法。該方法返回一個斜杠都被轉義(即斜杠前面再加一個斜杠)的字符串,往往用于模板字符串的處理方法。

String.raw`Hi\n${2+3}!`
// 實際返回 "Hi\\n5!",顯示的是轉義后的結果 "Hi\n5!"

String.raw`Hi\u000A!`;
// 實際返回 "Hi\\u000A!",顯示的是轉義后的結果 "Hi\u000A!"

3, 實例方法:includes(), startsWith(), endsWith()

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

includes():返回布爾值,表示是否找到了參數字符串。
startsWith():返回布爾值,表示參數字符串是否在原字符串的頭部。
endsWith():返回布爾值,表示參數字符串是否在原字符串的尾部。

let s = 'Hello world!';

s.startsWith('Hello') // true
s.endsWith('!') // true
s.includes('o') // true

3,函數的增強

(1)標簽模板

標簽模板其實不是模板,而是函數調用的一種特殊形式。“標簽”指的就是函數,緊跟在后面的模板字符串就是它的參數。

let a = 5;
let b = 10;
function tag(s, v1, v2) {
  console.log(s[0]);
  console.log(s[1]);
  console.log(s[2]);
  console.log(v1);
  console.log(v2);
  return "OK";
}
tag`Hello ${ a + b } world ${ a * b}`;
// "Hello "
// " world "
// ""
// 15
// 50
// "OK"

(2)函數參數增強:參數默認值

ES6 允許為函數的參數設置默認值,即直接寫在參數定義的后面。

function log(x, y = 'World') {
  console.log(x, y);
}

log('Hello') // Hello World
log('Hello', 'China') // Hello China
log('Hello', '') // Hello

(3)箭頭函數的簡化

箭頭函數的this指向上級作用域

    const name = 'tony'
    const person = {
      name: 'tom',
      say: () => console.log(this.name),
      sayHello: function () {
        console.log(this.name)
      },
      sayHi: function () {
        setTimeout(function () {
          console.log(this.name)
        }, 500)
      },
      asyncSay: function () {
        setTimeout(()=>console.log(this.name), 500)
      }
    }
    person.say()  //tony
    person.sayHello() //tom
    person.sayHi() //tony
    person.asyncSay()  //tom

4.對象的擴展

屬性的簡潔表示法

ES6 允許在大括號里面,直接寫入變量和函數,作為對象的屬性和方法。這樣的書寫更加簡潔。除了屬性簡寫,方法也可以簡寫。

const foo = 'bar';
const baz = {foo};
baz // {foo: "bar"}

// 等同于
const baz = {foo: foo};
const o = {
  method() {
    return "Hello!";
  }
};

// 等同于

const o = {
  method: function() {
    return "Hello!";
  }
};

1、如果key與value變量名相同,省略:value

2、省略函數:function
3、計算屬性:[Math.random()]

   const bar = 'bar'
    const obj = {
      bar,
      fn () {
        console.log('1111')
      },
      [Math.random()]: '123'
    }
    console.log(obj)

“es6增強的功能有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

es6
AI

邢台县| 罗甸县| 岳阳县| 鹿泉市| 清河县| 岳普湖县| 威信县| 焦作市| 乐清市| 泸水县| 怀宁县| 麦盖提县| 山东省| 托克托县| 河源市| 旬阳县| 尤溪县| 商水县| 华池县| 邢台市| 连云港市| 舞阳县| 柳江县| 大埔县| 驻马店市| 永福县| 陆川县| 灵川县| 嵊州市| 绍兴市| 灌南县| 邢台县| 红河县| 武义县| 大关县| 稻城县| 上虞市| 陇西县| 穆棱市| 来宾市| 长治市|