შესვლა

პროგრამირების საფუძვლები › დამწყები › ობიექტები

თვისებების წაკითხვა და შეცვლა

მარტივი⏱ 7 წთ+20 XP👑 Pro#ობიექტები#თვისება#delete#in

რას ისწავლი

  • როგორ შეცვალო, დაამატო და წაშალო თვისება
  • რით განსხვავდება obj.key და obj["key"] ჩანაწერი
  • როგორ შეამოწმო, აქვს თუ არა ობიექტს თვისება

შეცვლა და დამატება

ობიექტი ცოცხალია: მისი თვისებები პროგრამის განმავლობაში შეიძლება შეიცვალოს. ამისთვის ჩვეულებრივი მინიჭება გჭირდება:

JavaScript
let player = { name: "ბიტი", level: 3 };

player.level = 4;          // შეცვლა
player.level++;            // კიდევ ერთით
player.coins = 50;         // დამატება: ასეთი თვისება ჯერ არ იყო

console.log(player);       // {"name":"ბიტი","level":5,"coins":50}

თუ თვისება უკვე არსებობს, მინიჭება მას ცვლის. თუ არ არსებობს, ქმნის. სპეციალური ბრძანება დამატებისთვის არ გჭირდება. თვისებაზე მუშაობს ყველაფერი, რაც ცვლადზე: +=, ++, შედარება, გამოთვლა.

წაშლა

თვისების მოსაშორებლად გამოიყენე delete:

JavaScript
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 ნათლად ამბობს „მონეტები არ აქვს“, ხოლო წაშლილი თვისება ტოვებს კითხვას, ოდესმე თუ ჰქონდა. ობიექტები, რომლებსაც ერთნაირი თვისებები აქვთ, უფრო ადვილი დასამუშავებელია.

კვადრატული ფრჩხილები

თვისების წაკითხვის მეორე გზაა კვადრატული ფრჩხილები, გასაღებით ბრჭყალებში:

JavaScript
let player = { name: "ბიტი", level: 3 };
console.log(player["name"]);   // ბიტი

რატომ გვჭირდება მეორე ჩანაწერი, თუ წერტილი უფრო მოკლეა? ორი შემთხვევის გამო:

  1. გასაღები ცვლადშია. თუ წინასწარ არ იცი, რომელი თვისება დაგჭირდება, მაგალითად მომხმარებელი ირჩევს, გასაღების სახელი ცვლადში ინახება. წერტილი ამ დროს არ მუშაობს: player.field ეძებს თვისებას სახელად „field“.
JavaScript
let player = { name: "ბიტი", level: 3 };
let field = "level";

console.log(player[field]);   // 3
console.log(player.field);    // undefined
  1. გასაღები უჩვეულოა. თუ გასაღებში ინტერვალი, ტირე ან ციფრით იწყება, ის ობიექტში ბრჭყალებში უნდა ჩაიწეროს და მხოლოდ ფრჩხილებით წაიკითხება: prices["თეთრი პური"].

ყველა სხვა შემთხვევაში წერტილი გამოიყენე: ის უფრო მოკლე და წაკითხვადია.

არსებობს თუ არა თვისება

რადგან არარსებული თვისება შეცდომას კი არ იძლევა, არამედ undefined-ს, ზოგჯერ წინასწარ უნდა შეამოწმო. ამისთვის არსებობს ოპერატორი in:

JavaScript
let player = { name: "ბიტი", level: 3 };
console.log("level" in player);   // true
console.log("coins" in player);   // false

გასაღები აქ ბრჭყალებში იწერება, რადგან ტექსტია.

სცადე თავად

გაუშვი, მერე field-ში ჩაწერე "city" და ნახე, რა დაიბეჭდება. შემდეგ დაამატე პროფილს ქალაქი.

JavaScript · სცადე თავად

ხშირი შეცდომები

  • გასაღები ბრჭყალების გარეშე ფრჩხილებში. 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}.

JavaScript · სცადე თავად
💡 მინიშნება

account.balance -= 30;, account.isPremium = true;, delete account.user;.

✅ ამოხსნის ნახვა
JavaScript
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-ს?

3რას დაბეჭდავს console.log("x" in { x: 0 });?

შეჯამება

  • მინიჭება არსებულ თვისებას ცვლის, არარსებულს ქმნის: obj.key = value.
  • delete obj.key თვისებას შლის.
  • obj["key"] საჭიროა, როცა გასაღები ცვლადშია ან უჩვეულოა. სხვა დროს წერტილი.
  • "key" in obj ამოწმებს, არსებობს თუ არა თვისება.
📝 ჩემი შენიშვნა