Stilly

Stilly

بېكەت باشلىقى

يازمىلىرى
ئەگەشكۈچىلىرى
ئەگەشكەنلىرى
74
32
0

ES6 ئۆگىنىش خاتىرىسى 2 - ئۆزگەرگۈچى مىقدار ھاسىللاش

ES6 مەلۇم قائىدىگە ئەمەل قىلغان ئاساستا ، سان گۇرۇپپىسى ۋە ئوبىكىتنىڭ ئىچىدىن مەلۇم بىر قىممەتنى ئىلىپ  يېڭىدىن بىر ئۆزگەرگۈچى مىقدارنىڭ قىممىتى قىلىشقا بولىدۇ . ES6 نىڭ بۇ ئالاھىدىلىكى ئادەتتە 解构 يەنى (Destructuring) دەپ ئاتىلىدۇ .


مەسىلەن ئۆزگەرگۈچى مىقدار ھاسىللاش ئۈچۈن بۇرۇن تۆۋەنىكىدەك يازاتتۇق .

let a = 1;
let b = 2;
let c = 3;

ئەمدى ES6 دە تۆۋەندىكىدەك يېزىشقا بولىدىغان بولدى .

let [a, b, c] = [1, 2, 3];

يۇقارقى كودتا سانلار گۇرۇپپىسدىكى ئەزالارنىڭ ئورنى ئۆزگەرگۈچى مىقدارنىڭ رەت تەرتىپىگە ماس ھالدىكى مىقدارغا قىممەت بولالايدۇ .( بىر قېتىمدىلا كۆپ ئۆزگەرگۈچى مىقدار ھاسىللاشقا بولىدۇ )


يەنى مەسىلەن تۆۋەندىكى كودقا قارايلى .

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 // []

ئاددىيراق قىلىپ ئىيىتقاندا  ES6 دە بۇنداق گىرامماتىكىنىڭ ھالقىلىق يىرى شۇكى = بەلگىسىنىڭ ئىككى تەرەپ ئىپادىنىڭ تىپى ئوخشاش (模式匹配) بولسىلا = بەلگىسىنىڭ ئىككى تەرىپىدىكى ئىپادە ئاپتوماتىك بىر تەرەپ قىلىنىدۇ .بۇنداق گىرامماتىكا شارائىتىدا ناۋادا = بەلگىسىنىڭ ئىككى تەرىپىدىكى ئىپادە ئاپتوماتىك بىر تەرەپ قىلىش مەغلۇپ بولسا undefined قېممەتنى قايتۇرىدۇ .


سۈكۈتتىكى قىممەت 

ES6 نىڭ گىرامماتىكىسىدا  ئۆزگەرگۈچى مىقدارغا سۈكۈتتىكى قىممەت بېرىشنى قوللايدىغان بولدى . مەسىلەن تۆۋەندىكى كودقا قارايلى .

let [foo = true] = [];
foo // true

let [x, y = 'b'] = ['a']; // x='a', y='b'
let [x, y = 'b'] = ['a', undefined]; // x='a', y='b'

لىكىن بۇ خىل گىرامماتىكا مۇھىتى ئىچكى قىسىمدا مۇتلەق تەڭ (===) ئارقىلىق مەلۇم بىر ئورۇندا قىممەت بار يوقلۇقىنى تەكشۈرىدىغان بولغاچ ،ناۋادا سانلار گۇرۇپپىسىنىڭ ئەزالىرى مۇتلەق تەڭ بولمىسا ، بۇ چاغدا ئۆزگەرگۈچى مىقدارنىڭ سۈكۈتتىكى قېممىتى ئىناۋەتسىز بولىدۇ .


ئوبىكىت شەكىلدە قىممەت بىرىش 

ES6 دە يەنە مۇنداق ئوبىكىت شەكىلدە قىممەت بىرىشنى قوللايدىغان بولدى ، مەسىلەن :

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

بۇ خىل گىرامماتىكىنىڭ سانلار گۇرۇپپىسى ئارقىلىق ئۆزگەرگۈچى مىقدار ھاسىللاشتىن پەرقلىنىدىغان يىرى شۇكى ، بۇ خىل ئۇسۇل مىقدارنىڭ ئورنىغا ئاساسەن قىممەت بەرمەستىن بەلكى ئۆزگەرگۈچى مىقدار بىلەن ئوبىكىتنىڭ ئىچدىكى خاسلىق نامى ئوخشاش بولغان قىممەتنى ئالىدۇ .

ناۋادا ئۆزگەرگۈچى مىقدار بىلەن ئوبىكىتنىڭ ئىچدىكى خاسلىق نامى ئوخشاش بولمىسا چوقۇم تۆۋەندىكىدەك يېزىش كىرەك .مەسىلەن 

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

let obj = { first: 'hello', last: 'world' };
let { first: f, last: l } = obj;
f // 'hello'
l // 'world'

دىمەك يۇقارقى مىسالدىن كۆرۋىلىشقا بولىدۇكى ئوبىكىت شەكىلدە قىممەت بىرىش  دەل ES6 يىڭى گىرامماتىكىسىدىكى مىقدار ھاسىللاشنىڭ ماھىيىتىدۇر . مەسىلەن تۆۋەندىكى كودقا يەنە بىر قارايلى .

let { foo: foo, bar: bar } = { foo: "aaa", bar: "bbb" };


ئاندىن ماۋۇ كودقا قارايلى 

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