Apabila saya melihat tutorial ES6 Ruan Yifeng tentang memusnahkan tugasan dan nilai lalai, saya tidak begitu memahami bahagian ini.
Pautan asal
Perhatikan bahawa ES6 menggunakan pengendali kesaksamaan yang ketat (===) secara dalaman untuk menentukan sama ada kedudukan mempunyai nilai. Oleh itu, Jika ahli tatasusunan tidak sama dengan yang tidak ditentukan, nilai lalai tidak akan berkuat kuasa.
function f() {
console.log('aaa');
}
let [x = f()] = [1];
Buku mengatakan bahawa kod di atas adalah bersamaan dengan kod berikut
let x;
if ([1][0] === undefined) {
x = f();
} else {
x = [1][0];
}
Maaf, dari mana asalnya [1][0]
ini? Bukankah sepatutnya begini?
let x;
if (1 === undefined) {
x = f();
} else {
x = 1;
}
Apabila menyahbina tatasusunan, prinsipnya adalah seperti berikut: masukkan satu atau lebih pembolehubah ke dalam tatasusunan A, dan kemudian jadikan tatasusunan ini A sama dengan tatasusunan B yang lain. Kemudian semasa penstrukturan, nilai kedudukan tertentu dalam tatasusunan A akan sama dengan kedudukan tatasusunan yang sepadan B. nilai.
Maksud kod ini adalah untuk mula-mula mencipta tatasusunan A. Item pertama dalam tatasusunan A ialah x, dan kemudian ada tatasusunan B, B = [1].
Kemudian biarkan A = B. Kesan akhir ialah A[ 0] = B[0], iaitu
x=B[0]
,也即x=[1][0]
.Jadi apabila menilai sama ada ia sama dengan undefined, lakukan ini
1 dalam [1] di sebelah kanan
sepadan dengan x, iaitu,
[1][0]
sepadan dengan xDekonstruk, dekonstruk, dekonstruk. . . Jadi tujuannya adalah untuk membuka ikatan di sebelah kanan tanda sama, jadi kita mesti membuka ikatan
[1]
.Jadi
let [x]=[1]
,那么x
就是[1][0]
,也就是1
。所以其实x
的赋值是根据[1][0]
datang untuk menilai.Saya tidak tahu sama ada saya faham apa yang saya katakan, tetapi lebih baik saya berikan anda dokumentasi:
https://developer.mozilla.org...