პროგრამირების საფუძვლები › დამწყები › ობიექტები
თვისებების წაკითხვა და შეცვლა
ეს თავი CodeQuest Pro-ს ნაწილია
Pro ხსნის სკოლის ყველა კურსს და თამაშის ყველა ლეველს, ვიდეოს და პროექტს. ერთჯერადი გადახდა, გამოწერის გარეშე.
რას ისწავლი
- როგორ შეცვალო, დაამატო და წაშალო თვისება
- რით განსხვავდება
obj.keyდაobj["key"]ჩანაწერი - როგორ შეამოწმო, აქვს თუ არა ობიექტს თვისება
შეცვლა და დამატება
ობიექტი ცოცხალია: მისი თვისებები პროგრამის განმავლობაში შეიძლება შეიცვალოს. ამისთვის ჩვეულებრივი მინიჭება გჭირდება:
let player = { name: "ბიტი", level: 3 };
player.level = 4; // შეცვლა
player.level++; // კიდევ ერთით
player.coins = 50; // დამატება: ასეთი თვისება ჯერ არ იყო
console.log(player); // {"name":"ბიტი","level":5,"coins":50}თუ თვისება უკვე არსებობს, მინიჭება მას ცვლის. თუ არ არსებობს, ქმნის. სპეციალური ბრძანება დამატებისთვის არ გჭირდება. თვისებაზე მუშაობს ყველაფერი, რაც ცვლადზე: +=, ++, შედარება, გამოთვლა.
წაშლა
თვისების მოსაშორებლად გამოიყენე delete:
let player = { name: "ბიტი", level: 3, coins: 50 };
delete player.coins;
console.log(player); // {"name":"ბიტი","level":3}
console.log(player.coins); // undefinedწაშლილი, ისევე როგორც არასოდეს არსებული თვისება, undefined-ს აბრუნებს.
წაშლა იშვიათად გჭირდება. ხშირად ჯობს, თვისება ადგილზე დატოვო და მნიშვნელობა შეცვალო: მაგალითად, player.coins = 0 ნათლად ამბობს „მონეტები არ აქვს“, ხოლო წაშლილი თვისება ტოვებს კითხვას, ოდესმე თუ ჰქონდა. ობიექტები, რომლებსაც ერთნაირი თვისებები აქვთ, უფრო ადვილი დასამუშავებელია.
კვადრატული ფრჩხილები
თვისების წაკითხვის მეორე გზაა კვადრატული ფრჩხილები, გასაღებით ბრჭყალებში:
let player = { name: "ბიტი", level: 3 };
console.log(player["name"]); // ბიტირატომ გვჭირდება მეორე ჩანაწერი, თუ წერტილი უფრო მოკლეა? ორი შემთხვევის გამო:
- გასაღები ცვლადშია. თუ წინასწარ არ იცი, რომელი თვისება დაგჭირდება, მაგალითად მომხმარებელი ირჩევს, გასაღების სახელი ცვლადში ინახება. წერტილი ამ დროს არ მუშაობს:
player.fieldეძებს თვისებას სახელად „field“.
let player = { name: "ბიტი", level: 3 };
let field = "level";
console.log(player[field]); // 3
console.log(player.field); // undefined- გასაღები უჩვეულოა. თუ გასაღებში ინტერვალი, ტირე ან ციფრით იწყება, ის ობიექტში ბრჭყალებში უნდა ჩაიწეროს და მხოლოდ ფრჩხილებით წაიკითხება:
prices["თეთრი პური"].
ყველა სხვა შემთხვევაში წერტილი გამოიყენე: ის უფრო მოკლე და წაკითხვადია.
არსებობს თუ არა თვისება
რადგან არარსებული თვისება შეცდომას კი არ იძლევა, არამედ undefined-ს, ზოგჯერ წინასწარ უნდა შეამოწმო. ამისთვის არსებობს ოპერატორი in:
let player = { name: "ბიტი", level: 3 };
console.log("level" in player); // true
console.log("coins" in player); // falseგასაღები აქ ბრჭყალებში იწერება, რადგან ტექსტია.
სცადე თავად
გაუშვი, მერე field-ში ჩაწერე "city" და ნახე, რა დაიბეჭდება. შემდეგ დაამატე პროფილს ქალაქი.
ხშირი შეცდომები
- გასაღები ბრჭყალების გარეშე ფრჩხილებში.
player[name]ეძებს ცვლადსnameდა მის მნიშვნელობას იყენებს გასაღებად. თუ ასეთი ცვლადი არ არსებობს, შეცდომა იქნება. ტექსტური გასაღები ბრჭყალებში ჩაწერე:player["name"]. - წერტილი ცვლადი გასაღებით.
player.fieldარ კითხულობს ცვლადსfield. ცვლადით მხოლოდ ფრჩხილებით:player[field]. - სახელის შეცდომა მინიჭებისას.
player.levl = 5;შეცდომას არ იძლევა, უბრალოდ ახალ თვისებას ქმნის,levelკი ძველი რჩება.
სავარჯიშო
მოცემულია let account = { user: "dato", balance: 100 };. შეამცირე ბალანსი 30-ით, დაამატე თვისება isPremium მნიშვნელობით true, წაშალე user და დაბეჭდე ობიექტი. უნდა მიიღო {"balance":70,"isPremium":true}.
💡 მინიშნება
account.balance -= 30;, account.isPremium = true;, delete account.user;.
✅ ამოხსნის ნახვა
let account = { user: "dato", balance: 100 };
account.balance -= 30;
account.isPremium = true;
delete account.user;
console.log(account);მინი-ქვიზი
1რა მოხდება? let o = { a: 1 }; o.b = 2;
არარსებულ თვისებაზე მინიჭება მას ქმნის.
2let key = "age"; let p = { age: 12 }; რომელი დაბეჭდავს 12-ს?
ცვლადით გასაღები მხოლოდ ფრჩხილებით მუშაობს. p["key"] და p.key ეძებს თვისებას სახელად „key“.
3რას დაბეჭდავს console.log("x" in { x: 0 });?
in ამოწმებს, არსებობს თუ არა გასაღები, და არა მნიშვნელობას.
შეჯამება
- მინიჭება არსებულ თვისებას ცვლის, არარსებულს ქმნის:
obj.key = value. delete obj.keyთვისებას შლის.obj["key"]საჭიროა, როცა გასაღები ცვლადშია ან უჩვეულოა. სხვა დროს წერტილი."key" in objამოწმებს, არსებობს თუ არა თვისება.