Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ | ΠšΠ°Ρ€ΠΌΠ°Π½Π½Π°Ρ ΠΊΠ½ΠΈΠ³Π° ΠΏΠΎ TypeScript

  • ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ свойств (property modifiers)
    • ΠžΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ свойства
  • Бвойства, доступныС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния (readonly properties)
    • Π‘ΠΈΠ³Π½Π°Ρ‚ΡƒΡ€Ρ‹ индСкса (index signatures)
  • Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² (extending types)
    • ΠŸΠ΅Ρ€Π΅ΡΠ΅Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² (intersection types)
    • Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΈΠ»ΠΈ пСрСсСчСниС Ρ‚ΠΈΠΏΠΎΠ²?
  • ΠžΠ±Ρ‰ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹
    • Π’ΠΈΠΏ Array
    • Π’ΠΈΠΏ ReadonlyArray
    • ΠšΠΎΡ€Ρ‚Π΅ΠΆ (tuple)

Π’ JS ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ способом Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Π’ TS ΠΎΠ½ΠΈ прСдставлСны ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ (object types).

Как ΠΌΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ Ρ€Π°Π½Π΅Π΅, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹ΠΌΠΈ:

ΠΈΠ»ΠΈ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ интСрфСйсов (interfaces):

ΠΈΠ»ΠΈ синонимов Ρ‚ΠΈΠΏΠ° (type aliases):

Π’ΠΎ всСх ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… наша функция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит свойство name (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΈΠΏΠ° string) ΠΈ age (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΈΠΏΠ° number).

ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ свойств (property modifiers)#

КаТдоС свойство Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΌ Ρ‚ΠΈΠΏΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ нСсколько Π²Π΅Ρ‰Π΅ΠΉ: сам Ρ‚ΠΈΠΏ, Ρ‚ΠΎ, являСтся Π»ΠΈ свойство ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ, ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π»ΠΈ ΠΎΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ.

ΠžΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ свойства#

Бвойства ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ ΠΊΠ°ΠΊ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ (Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅) ΠΏΡƒΡ‚Π΅ΠΌ добавлСния Π²ΠΎΠΏΡ€ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΠΊΠ° (?) послС ΠΈΡ… Π½Π°Π·Π²Π°Π½ΠΈΠΉ:

ВсС Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π²Π°Π»ΠΈΠ΄Π½Ρ‹ΠΌΠΈ. ΠžΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ссли свойство установлСно, ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ.

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ значСния Ρ‚Π°ΠΊΠΈΡ… свойств. Однако, ΠΏΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΉ настройкС strictNullChecks, ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ сообщСния ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ значСниями ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… свойств являСтся undefined:

Π’ JS ΠΏΡ€ΠΈ доступС ΠΊ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ свойству возвращаСтся undefined. Π”ΠΎΠ±Π°Π²ΠΈΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ этого значСния:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ всС Π² порядкС. Но для опрСдСлСния «Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½Ρ‹Ρ…» Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ) ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² JS сущСствуСт ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ синтаксис:

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΡ‹ дСструктурировали ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ painShape ΠΈ ΡƒΠΊΠ°Π·Π°Π»ΠΈ значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для xPos ΠΈ yPos. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π² Ρ‚Π΅Π»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ painShape, Π½ΠΎ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΈ Π΅Π΅ Π²Ρ‹Π·ΠΎΠ²Π΅.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅

Π’ настоящСС врСмя Π½Π΅ сущСствуСт способа ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ Ρ‚ΠΈΠΏΠ° Π² Π΄Π΅ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚Π°ΠΊΠΎΠΉ синтаксис Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ JS ΠΈΠ½Π°Ρ‡Π΅.

shape: Shape ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ «Π²ΠΎΠ·ΡŒΠΌΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ свойства shape ΠΈ присвой Π΅Π³ΠΎ локальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Shape«. Аналогично xPos: number создаСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ number, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ основано Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ xPos.

Бвойства, доступныС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния (readonly properties)#

Бвойства ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ ΠΊΠ°ΠΊ доступныС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова readonly. Π’Π°ΠΊΠΈΠ΅ свойства Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒΡΡ Π² процСссС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ²:

ИспользованиС ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° readonly Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ саму ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΈΠΌΠΌΡƒΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΠΉ (нСизмСняСмой), это лишь Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ Π΅ΠΉ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ значСния:

readonly сообщаСт TS, ΠΊΠ°ΠΊ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. ΠŸΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ совмСстимости Π΄Π²ΡƒΡ… Ρ‚ΠΈΠΏΠΎΠ² TS Π½Π΅ провСряСт, ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ свойства доступными Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ‚Π°ΠΊΠΈΠ΅ свойства ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ синонимов:

Π‘ΠΈΠ³Π½Π°Ρ‚ΡƒΡ€Ρ‹ индСкса (index signatures)#

Иногда ΠΌΡ‹ Π½Π΅ Π·Π½Π°Π΅ΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠΉ всСх свойств Ρ‚ΠΈΠΏΠ°, Π½ΠΎ Π·Π½Π°Π΅ΠΌ Ρ„ΠΎΡ€ΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

Π’ Ρ‚Π°ΠΊΠΈΡ… случаях ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ индСксы для описания Ρ‚ΠΈΠΏΠΎΠ² Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρƒ нас имССтся интСрфСйс StringArray, содСрТащий сигнатуру индСкса. Данная сигнатура ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ индСксации StringArray с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ number возвращаСтся string.

Π‘ΠΈΠ³Π½Π°Ρ‚ΡƒΡ€Π° индСкса Ρ‚ΠΈΠΏΠ° свойства Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ строкой ΠΈΠ»ΠΈ числом.

НСсмотря Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΎΠ±ΠΎΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² индСксаторов (indexers), Ρ‚ΠΈΠΏ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ ΠΈΠ· числового индСксатора, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠΌ Ρ‚ΠΈΠΏΠ°, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ строковым индСксатором. Π­Ρ‚ΠΎ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ индСксации с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ number, JS ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ Π² string ΠΏΠ΅Ρ€Π΅Π΄ индСксациСй ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ индСксация с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ 100 (number) эквивалСнта индСксации с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ "100" (string), поэтому ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ согласованными ΠΌΠ΅ΠΆΠ΄Ρƒ собой.

Π’ Ρ‚ΠΎ врСмя, ΠΊΠ°ΠΊ сигнатуры строкового индСкса ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ способом для описания ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π° «ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ», ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ совпадСниС всСх свойств ΠΈΡ… Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΌ Ρ‚ΠΈΠΏΠ°ΠΌ. Π­Ρ‚ΠΎ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ строковый индСкс опрСдСляСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ доступа ΠΊ obj.property с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ obj['property']. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ‚ΠΈΠΏ name Π½Π΅ совпадаСт с Ρ‚ΠΈΠΏΠΎΠΌ строкового индСкса, поэтому Π²ΠΎ врСмя ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка:

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, свойства с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π²Π°Π»ΠΈΠ΄Π½Ρ‹ΠΌΠΈ Π² случаС, ΠΊΠΎΠ³Π΄Π° сигнатура индСкса — это объСдинСниС Ρ‚ΠΈΠΏΠΎΠ² (union):

Π‘ΠΈΠ³Π½Π°Ρ‚ΡƒΡ€Ρ‹ индСкса ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ доступными Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния для прСдотвращСния ΠΈΡ… пСрСзаписи:

Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² (extending types)#

Π§Ρ‚ΠΎ Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ вСрсиСй Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°? НапримСр, Ρƒ нас ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΈΠΏ BasicAddress, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ поля, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ писСм ΠΈ посылок Π² БША:

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях этого Π±ΡƒΠ΄Π΅Ρ‚ достаточно, ΠΎΠ΄Π½Π°ΠΊΠΎ адрСса часто ΠΈΠΌΠ΅ΡŽΡ‚ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹. Для Ρ‚Π°ΠΊΠΈΡ… случаСв ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ AddressWithUnit:

НСуТСли Π½Π΅ сущСствуСт Π±ΠΎΠ»Π΅Π΅ простого способа добавлСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ? На самом Π΄Π΅Π»Π΅, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ просто Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ BasicAddress, Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΠΊ Π½Π΅ΠΌΡƒ Π½ΠΎΠ²Ρ‹Π΅ поля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ для AddressWithUnit:

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово extends позволяСт ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Π»Π΅Π½ΠΎΠ² ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹. Оно Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° связь ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ:

ΠŸΠ΅Ρ€Π΅ΡΠ΅Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² (intersection types)#

interface позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π½Π° основС Π΄Ρ€ΡƒΠ³ΠΈΡ… посрСдством ΠΈΡ… Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ. TS Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ, которая называСтся пСрСсСчСниСм Ρ‚ΠΈΠΏΠΎΠ² ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‰ΠΈΠΌΠΈΡΡ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΈ позволяСт ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹. ΠŸΠ΅Ρ€Π΅ΡΠ΅Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² опрСдСляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° &:

ΠŸΠ΅Ρ€Π΅ΡΠ΅Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² Colorful ΠΈ Circle ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ возникновСнию Ρ‚ΠΈΠΏΠ°, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π³ΠΎ всС поля Colorful ΠΈ Circle:

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΈΠ»ΠΈ пСрСсСчСниС Ρ‚ΠΈΠΏΠΎΠ²?#

И интСрфСйсы, ΠΈ пСрСсСчСния Ρ‚ΠΈΠΏΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для создания Π½ΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π½Π° основС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π·Π° счСт комбинирования послСдних. ОсновноС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹.

ΠžΠ±Ρ‰ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹#

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас имССтся Ρ‚ΠΈΠΏ Box, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ любоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅:

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π½ΠΎ Ρ‚ΠΈΠΏ any являСтся нСбСзопасным с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния систСмы Ρ‚ΠΈΠΏΠΎΠ². ВмСсто Π½Π΅Π³ΠΎ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ unknown, Π½ΠΎ это Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ выполнСния ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ ΠΈ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Π½Ρ‹Ρ… ошибкам ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ Ρ‚ΠΈΠΏΠΎΠ² (type assertions).

Π‘ΠΎΠ»Π΅Π΅ бСзопасным способом Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Box для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° contents:

Однако, это обуславливаСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ создания Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΎΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (function overloads) для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ‚Π°ΠΊΠΈΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ:

Блишком ΠΌΠ½ΠΎΠ³ΠΎ шаблонного ΠΊΠΎΠ΄Π°. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ Π½Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΈ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΡƒ. Π’Π°ΠΊ Π½Π΅ ΠΏΠΎΠΉΠ΄Π΅Ρ‚.

Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ (generic) Ρ‚ΠΈΠΏ Box, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ° (type parameter):

Π—Π°Ρ‚Π΅ΠΌ, ΠΏΡ€ΠΈ ссылкС Π½Π° Box, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ‚ΠΈΠΏΠ° (type argument) вмСсто Type:

По сути, Box — это шаблон для настоящСго Ρ‚ΠΈΠΏΠ°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Type Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ. Когда TS Π²ΠΈΠ΄ΠΈΡ‚ Box<string>, ΠΎΠ½ замСняСт всС вхоТдСния Type Π² Box<Type> Π½Π° string ΠΈ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅Ρ‚ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ‡Π΅ΠΌ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ { contents: string }. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Box<string> Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ рассмотрСнный Ρ€Π°Π½Π΅Π΅ StringBox.

Π’ΠΈΠΏ Box Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ являСтся ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ (Ρ‚.Π΅. имССтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот Ρ‚ΠΈΠΏ нСсколько Ρ€Π°Π· Π±Π΅Π· нСобходимости Π΅Π³ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ). Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΌ потрСбуСтся ΠΊΠΎΡ€ΠΎΠ±ΠΊΠ° (Box — ΠΊΠΎΡ€ΠΎΠ±ΠΊΠ°, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€) Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Π½Π°ΠΌ Π½Π΅ придСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ Box:

Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ВмСсто Π½ΠΈΡ… ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ (generic function):

Π‘ΠΈΠ½ΠΎΠ½ΠΈΠΌΡ‹ Ρ‚ΠΈΠΏΠΎΠ² Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΌΠΈ. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ Ρ‚ΠΈΠΏ (generic type) Box:

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ синонимы, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ интСрфСйсов, ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для описания Π»ΡŽΠ±Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΈΠΏΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π’ΠΈΠΏ

Array#

Бинтаксис number[] ΠΈΠ»ΠΈ string[] — это сокращСния для Array<number> ΠΈ Array<string>, соотвСтствСнно:

Array сам ΠΏΠΎ сСбС являСтся ΠΎΠ±Ρ‰ΠΈΠΌ Ρ‚ΠΈΠΏΠΎΠΌ:

Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ JS Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±Ρ‰ΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Map<K, V>, Set<T> ΠΈ Promise<T>. Π£ΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ структуры ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π»ΡŽΠ±Ρ‹ΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ Ρ‚ΠΈΠΏΠΎΠ².

Π’ΠΈΠΏ

ReadonlyArray#

ReadonlyArray — это ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ массив, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ.

Когда ΠΌΡ‹ создаСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ReadonlyArray, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ собираСмся ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ массив, Π° ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΡƒΡŽ ReadonlyArray, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ любой массив ΠΈ Π½Π΅ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒΡΡ.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Array, ReadonlyArray Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ конструктор:

Однако, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ массиву, доступному Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния, ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ массивы:

Для опрСдСлСния массива, доступного Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния, Ρ‚Π°ΠΊΠΆΠ΅ сущСствуСт сокращСнный синтаксис, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выглядит ΠΊΠ°ΠΊ readonly Type[]:

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° свойств readonly, присваиваниС ΠΌΠ΅ΠΆΠ΄Ρƒ Array ΠΈ ReadonlyArray являСтся ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΌ (Ρ‚. Π΅. Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ массив ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ присвоСн доступному Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния массиву):

ΠšΠΎΡ€Ρ‚Π΅ΠΆ (tuple)#

ΠšΠΎΡ€Ρ‚Π΅ΠΆ — это Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠ° Array с фиксированным количСством элСмСнтов ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ².

StrNumPair — это ΠΊΠΎΡ€Ρ‚Π΅ΠΆ string ΠΈ number. StrNumPair описываСт массив, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ (элСмСнт ΠΏΠΎΠ΄ индСксом 0) ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ string, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ (элСмСнт ΠΏΠΎΠ΄ индСксом 1) — number.

Если ΠΌΡ‹ попытаСмся ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ элСмСнт ΠΏΠΎ индСксу, прСвосходящСму количСство элСмСнтов, Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΎΡˆΠΈΠ±ΠΊΡƒ:

ΠšΠΎΡ€Ρ‚Π΅ΠΆΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ:

РассматриваСмый ΠΊΠΎΡ€Ρ‚Π΅ΠΆ являСтся эквивалСнтом Ρ‚Π°ΠΊΠΎΠΉ вСрсии Ρ‚ΠΈΠΏΠ° Array:

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ (?). Π’Π°ΠΊΠΈΠ΅ элСмСнты ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² самом ΠΊΠΎΠ½Ρ†Π΅ ΠΈ Π²Π»ΠΈΡΡŽΡ‚ Π½Π° Ρ‚ΠΈΠΏ свойства length:

ΠšΠΎΡ€Ρ‚Π΅ΠΆΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ элСмСнты (Ρ‚.Π΅. элСмСнты, ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ, rest elements), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ массивом ΠΈΠ»ΠΈ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΌ:

. ..boolean[] ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ любоС количСство элСмСнтов Ρ‚ΠΈΠΏΠ° boolean.

Π’Π°ΠΊΠΈΠ΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ (length) — ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ лишь Π½Π°Π±ΠΎΡ€ извСстных элСмСнтов Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… позициях:

ΠšΠΎΡ€Ρ‚Π΅ΠΆΠΈ сами ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² качСствС ΠΎΡΡ‚Π°Π²ΡˆΠΈΡ…ΡΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². НапримСр, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄:

являСтся эквивалСнтом ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ:

ΠšΠΎΡ€Ρ‚Π΅ΠΆΠΈ, доступныС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния (readonly tuple types)#

ΠšΠΎΡ€Ρ‚Π΅ΠΆΠΈ, доступныС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния, Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° readonly:

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° пСрСзаписи элСмСнта Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС:

ΠšΠΎΡ€Ρ‚Π΅ΠΆΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для опрСдСлСния Ρ‚ΠΈΠΏΠΎΠ² ΠΈΠΌΠΌΡƒΡ‚Π°Π±Π΅Π»ΡŒΠ½Ρ‹Ρ… массивов, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ считаСтся Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΡ… доступными Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΡ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ массива с ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ const являСтся readonly ΠΊΠΎΡ€Ρ‚Π΅ΠΆ:

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ distanceFromOrigin Π½Π΅ измСняСт элСмСнты ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ массива, Π½ΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ получСния измСняСмого ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΡ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ point являСтся readonly [3, 4], ΠΎΠ½ нСсовмСстим с [number, number], ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚Π°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠΌΡƒΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ элСмСнтов point.

ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ количСство элСмСнтов Π² спискС 

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ количСства элСмСнтов Π² спискС Π² Python — обычная опСрация. НапримСр, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°Ρ‚ΡŒ, сколько элСмСнтов Π² спискС, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π΅Π³ΠΎ просматриваСтС.Β ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ списки ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΒ Π² качСствС своих элСмСнтов ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ Ρ†Π΅Π»Ρ‹Ρ… чисСл, чисСл с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой, строк, логичСских Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π΄Ρ€ΡƒΠ³ΠΈΡ… списков ΠΈ Ρ‚. Π΄:

# List of just integers
list_a = [12, 5, 91, 18]
# List of integers, floats, strings, booleans
list_b = [4, 1.2, "hello world", True]

Если ΠΌΡ‹ посчитаСм элСмСнты list_a, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ всСго 5 элСмСнтов. Если ΠΌΡ‹ сдСлаСм Ρ‚ΠΎ ΠΆΠ΅ самоС для list_b, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ 4 элСмСнта.

Π•ΡΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ способы ΡƒΠ·Π½Π°Ρ‚ΡŒ количСство элСмСнтов Π² спискС.Β ΠŸΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ, Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π»ΠΈ Π²Ρ‹ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ списки ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ элСмСнт ΠΈΠ»ΠΈ всС элСмСнты Π²ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… списках, ΠΈΠ»ΠΈ Ссли вас ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ элСмСнты ΠΈ Ρ‚.

Π΄.

ВстроСнная функция&nbsp;len()

Π‘Π°ΠΌΡ‹ΠΉ простой способ ΡƒΠ·Π½Π°Ρ‚ΡŒ количСство элСмСнтов Π² спискС — ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ Python Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽΒ len().

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

list_a = ["Hello", 2, 15, "World", 34]
number_of_elements = len(list_a)
print("Number of elements in the list: ", number_of_elements)

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

Number of elements in the list: 5

Как слСдуСт ΠΈΠ· названия, функция len() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Π»ΠΈΠ½Ρƒ списка нСзависимо ΠΎΡ‚ Ρ‚ΠΈΠΏΠΎΠ² элСмСнтов Π² Π½Π΅ΠΌ.

ИспользованиС&nbsp;Ρ†ΠΈΠΊΠ»Π°&nbsp;for

Π”Ρ€ΡƒΠ³ΠΎΠΉ способ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это — ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая просматриваСт список с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° for.Β Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ счСтчик элСмСнтов Ρ€Π°Π²Π½Ρ‹ΠΌ 0, ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° выполняСтся итСрация Ρ†ΠΈΠΊΠ»Π°, счСт увСличиваСтся Π½Π° 1.

Π¦ΠΈΠΊΠ» заканчиваСтся, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅Ρ‚ всС элСмСнты, поэтому счСтчик Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΎΠ±Ρ‰Π΅Π΅ количСство элСмСнтов Π² спискС:

list_c = [20, 8.9, "Hi", 0, "word", "name"]
def get_number_of_elements(list):
    count = 0
    for element in list:
        count += 1
    return count
print("Number of elements in the list: ", get_number_of_elements(list_c))

Запуск этого ΠΊΠΎΠ΄Π° Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚:

Number of elements in the list:  6

Π­Ρ‚ΠΎ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ len(), Π½ΠΎ Π΅Π³ΠΎ стоит Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠΎΠ·ΠΆΠ΅ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Ρƒ ΠΆΠ΅ идСю ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π΅Π»ΠΎ со списком списков.

Β ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π»ΠΈΠ±ΠΎ Π½Π°Π΄ самими элСмСнтами, Π»ΠΈΠ±ΠΎ с ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ Π² Ρ†Π΅Π»ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ количСство ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов Π² спискС

Бписки ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… элСмСнтов, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Ρ‹. Если ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ количСство элСмСнтов Π±Π΅Π· Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ² (ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов), ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽΒ set().Β Π­Ρ‚Π° функция создаСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ set, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ отклоняСт всС ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ значСния.

Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ это Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ len(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ количСство элСмСнтов Π²Β set:

list_d = [100, 3, 100, "c", 100, 7.9, "c", 15]
number_of_elements = len(list_d)
number_of_unique_elements = len(set(list_d))
print("Number of elements in the list: ", number_of_elements)
print("Number of unique elements in the list: ", number_of_unique_elements)

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

Number of elements in the list: 8
Number of unique elements in the list:  5

ΠœΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² list_dΒ 8 элСмСнтов, 5 ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹.

Бписок списков с использованиСм&nbsp;len()

Π’ΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΈΠΈ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎ элСмСнты списков ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Однако списки, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ списки Π² качСствС своих элСмСнтов. НапримСр:

list_e = [[90, 4, 12, 2], [], [34, 45, 2], [9,4], "char", [7, 3, 19]]

Если ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽΒ len(), списки ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ элСмСнтами, поэтому Ρƒ нас Π±ΡƒΠ΄Π΅Ρ‚:

number_of_elements = len(list_e)
print("Number of elements in the list of lists: ", number_of_elements) 

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

Number of elements in the list of lists: 6

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ пустой список считаСтся ΠΎΠ΄Π½ΠΈΠΌ элСмСнтом. Если список Π² спискС содСрТит Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСмСнта, ΠΎΠ½ΠΈ Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅.Β Π’ΠΎΡ‚Β Π·Π΄Π΅ΡΡŒ for ΠΈ пригодится.

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ количСство элСмСнтов Π² спискС, содСрТащСм Π΄Ρ€ΡƒΠ³ΠΈΠ΅ списки

Если ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ всС элСмСнты Π²Π½ΡƒΡ‚Ρ€ΠΈ списка, содСрТащСго Π΄Ρ€ΡƒΠ³ΠΈΠ΅ списки, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΒ Ρ†ΠΈΠΊΠ»Β 

for. Β ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ count= 0 ΠΈ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ список. На ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π° count увСличиваСтся Π½Π° Π΄Π»ΠΈΠ½Ρƒ этого списка.

Для получСния Π΄Π»ΠΈΠ½Ρ‹Β Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ встроСнной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉΒ len():

list_e = [[90, 4, 12, 2], [], [34, 45, 2], [9,4], "char", [7, 3, 19]]
def get_all_elements_in_list_of_lists(list):
    count = 0
    for element in list_e:
        count += len(element)
    return count
print("Total number of elements in the list of lists: ", get_all_elements_in_list_of_lists(list_e)) 

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

Total number of elements in the list of lists: 16

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ слСдуСт ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ нСсколько Π²Π°ΠΆΠ½Ρ‹Ρ… ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ².Β Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π½Π° этот Ρ€Π°Π· пустой список Π½Π΅ повлиял Π½Π° ΠΎΠ±Ρ‰ΠΈΠΉ счСт.Β Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅ ΠΌΡ‹ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π΅ΠΌ Π΄Π»ΠΈΠ½Ρƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ списка ΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΄Π»ΠΈΠ½Π° пустого списка Ρ€Π°Π²Π½Π° 0, count увСличиваСтся Π½Π° 0.

Однако Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ символ строки "char" учитываСтся Π² ΠΎΠ±Ρ‰Π΅ΠΌ количСствС элСмСнтов. Β Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ функция len() воздСйствуСт Π½Π° строку, возвращая всС Π΅Π΅ символы.Β ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ этой ситуации, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, Ρ‡Ρ‚ΠΎ ΠΈ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Π½ΠΈΠΆΠ΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π°ΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ элСмСнты, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΎΡ‚ списков.

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ интСрСсный способ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, — ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ списка:

number_of_elements = sum([len(element) for element in list_e])

Π­Ρ‚Π° строка, ΠΏΠΎ сути, Π΄Π΅Π»Π°Π΅Ρ‚ Π΄Π²Π΅ Π²Π΅Ρ‰ΠΈ.Β Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΎΠ½ создаСт Π½ΠΎΠ²Ρ‹ΠΉ список, содСрТащий Π΄Π»ΠΈΠ½Ρ‹ всСх элСмСнтов исходного списка.Β Π’ нашСм случаС это Π±Ρ‹Π»ΠΎ Π±Ρ‹ Ρ‚Π°ΠΊΒ [4, 0, 3, 2, 4, 3].Β Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΎΠ½ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ sum(), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ вновь созданный список Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±Ρ‰ΡƒΡŽ сумму всСх элСмСнтов, давая Π½Π°ΠΌ ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ списки

Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ списки — это списки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ элСмСнтами Π΄Ρ€ΡƒΠ³ΠΈΡ… списков. Π’Π½ΡƒΡ‚Ρ€ΠΈ списков ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСсколько ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ:

list_f = [30, 0.9, [8, 56, 22, ["a", "b"]], [200, 3, [5, [89], 10]]]

ΠœΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ["a", "b"] содСрТится Π² спискС [8, 56, 22, ["a", "b"]], ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, содСрТится Π² основном спискС [30, 0. 9,[200, 3, [5, [89], 10]]].

ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, ΠΌΡ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽΒ count Ρ€Π°Π²Π½ΠΎΠΉ 0. Если ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±Ρ‰Π΅Π΅ количСство элСмСнтов Π²ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌ спискС, Π½Π°ΠΌ сначала Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, являСтся Π»ΠΈ элСмСнт списком ΠΈΠ»ΠΈ Π½Π΅Ρ‚. Если это Ρ‚Π°ΠΊ, ΠΌΡ‹ выполняСм Ρ†ΠΈΠΊΠ» Π²Π½ΡƒΡ‚Ρ€ΠΈ списка ΠΈ рСкурсивно Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ останутся Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ списки. ВсС элСмСнты, ΠΊΡ€ΠΎΠΌΠ΅ списков (Ρ†Π΅Π»Ρ‹Π΅ числа, строки ΠΈ Ρ‚.Π΄.), ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ счСтчик Π½Π° 1.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π²Ρ‹Π·Π²Π°Π½Π½Ρ‹Ρ… ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ.

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° ΠΊΠΎΠ΄ для подсчСта элСмСнтов Π²ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… списках:

list_f = [30, 0.9, [8, 56, 22, ["a", "hello"]], [200, 3, [5, [89], 10]]]
def get_elements_of_nested_list(element):
    count = 0
    if isinstance(element, list):
        for each_element in element:
            count += get_elements_nested_list(each_element)
    else:
        count += 1
    return count
print("Total number of elements in the nested list: ", get_elements_of_nested_list(list_f))

Запуск этого ΠΊΠΎΠ΄Π° даст Π½Π°ΠΌ:

Total number of elements in the nested list: 12

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ использовали Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ isinstance(), которая провСряСт, являСтся Π»ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ экзСмпляром класса, Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ. Β Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π²Ρ‹ΡˆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ½ провСряСт, являСтся Π»ΠΈ элСмСнт списком.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт являСтся Ρ†Π΅Π»Ρ‹ΠΌ числом 30, поэтому функция ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ Π±Π»ΠΎΠΊΡƒ else ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ счСтчик Π½Π° 1. Когда ΠΌΡ‹ добираСмся Π΄ΠΎΒ [8, 56, 22, ["a", "hello"]], функция распознаСт список ΠΈ рСкурсивно просматриваСт Π΅Π³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… списков.

Π’Ρ‹Π²ΠΎΠ΄

ΠœΡ‹ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎ Π² зависимости ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° списка, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρƒ нас Π΅ΡΡ‚ΡŒ, Π΅ΡΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ способы ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ количСство элСмСнтов. len() это ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ самая быстрая ΠΈ простая функция, Ссли Ρƒ нас Π΅ΡΡ‚ΡŒ плоскиС списки.

ΠŸΡ€ΠΈ использовании Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… списков элСмСнты Π²Π½ΡƒΡ‚Ρ€ΠΈ списков Π½Π΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ len(). Для этого Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ вСсь список.

Как ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ количСство свойств Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ JavaScript β€” Techstacker

Π£Π·Π½Π°ΠΉΡ‚Π΅, ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ количСство свойств Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ JavaScript двумя Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ способами.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ количСство свойств ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° JavaScript, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ:

  • a for loop
  • ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ Object. keys() .

Π”Π°Π²Π°ΠΉΡ‚Π΅ исслСдуСм ΠΈΡ… ΠΎΠ±ΠΎΠΈΡ…!

ΠŸΠΎΠ΄ΡΡ‡Π΅Ρ‚ свойств ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° for

Π’ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ JavaScript с ΠΈΠΌΠ΅Π½Π΅ΠΌ собака :

 константа собака = {
  имя: "Ная",
  возраст: 2,
  Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚",
  ΠŸΠΎΡ€ΠΎΠ΄Π°: "Π ΠΎΡ‚Π²Π΅ΠΉΠ»Π΅Ρ€ микс",
} 

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ количСство свойств ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²

dog , Π΄Π°Π²Π°ΠΉΡ‚Π΅ сначала объявим ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ с ΠΈΠΌΠ΅Π½Π΅ΠΌ count ΠΈ присвоим Π΅ΠΉ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0 :

 let count = 0 

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ собака ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ свойства, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΡ‹ сталкиваСмся, ΠΌΡ‹ добавляСм ΠΎΠ΄ΠΈΠ½ (+ 1) ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ count :

 for (let properties in dog) {
  количСство = количСство + 1
} 

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ console.log() :

 console.log(count)
// Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: 4 

Если Π²Ρ‹ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ написали ΠΊΠΎΠ΄, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ 4 .

ΠŸΠΎΠ΄ΡΡ‡Π΅Ρ‚ свойств ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Object.

keys()

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ JavaScript Object.keys() для подсчСта всСх пСрСчисляСмых свойств (ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± этом Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅) ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ dog ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ, Π½ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ dog object to Object.keys() ΠΈ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π΄Π»ΠΈΠ½Ρƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ свойства length :

 const dog = {
  имя: "Ная",
  возраст: 2,
  Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚",
  ΠŸΠΎΡ€ΠΎΠ΄Π°: "Π ΠΎΡ‚Π²Π΅ΠΉΠ»Π΅Ρ€ микс",
}
ΠΏΡƒΡΡ‚ΡŒ count = Object.keys(dog).length
console.log(количСство)
// Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: 4 

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅. Или это?

Π”Π° ΠΈ Π½Π΅Ρ‚. Π­Ρ‚ΠΎ зависит ΠΎΡ‚ контСкста.

for ΠΈ Object.keys()

Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ использованиСм Ρ†ΠΈΠΊΠ»Π° for ΠΈ Object.keys() is:

  • Π¦ΠΈΠΊΠ» for подсчитываСт ΠΊΠ°ΠΊ свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (здСсь dog ), Ρ‚Π°ΠΊ ΠΈ Π»ΡŽΠ±Ρ‹Π΅ свойства, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ связаны с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Π²Π½Π΅ Π΅Π³ΠΎ.
  • По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ Object. keys() подсчитываСт (пСрСчисляСт) Ρ‚ΠΎΠ»ΡŒΠΊΠΎ пСрСчисляСмыС (собствСнныС) свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π° Π½Π΅ связанныС свойства.

ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΠ΅ β€” это Π΄Ρ€ΡƒΠ³ΠΎΠ΅ слово для подсчСта .

Π§Ρ‚ΠΎ я имСю Π² Π²ΠΈΠ΄Ρƒ ΠΏΠΎΠ΄ «связанными свойствами»?

Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Object.keys() ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ, Π½ΠΎ Π½Π° этот Ρ€Π°Π· ΠΌΡ‹ свяТСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ собака с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ с ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ΅ , ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ свойство _proto_ :

 // Новый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚
ΠΏΡƒΡΡ‚ΡŒ ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ΅ = {
  Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π½ΠΎΠ³ΠΈ: ΠΏΡ€Π°Π²Π΄Π°,
}
константная собака = {
  имя: "Ная",
  возраст: 2,
  Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚",
  ΠŸΠΎΡ€ΠΎΠ΄Π°: "Π ΠΎΡ‚Π²Π΅ΠΉΠ»Π΅Ρ€ микс",
}
// Π‘Π²ΡΠ·Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ собаки с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ³ΠΎ
собака.__ΠΏΡ€ΠΎΡ‚ΠΎ__ = ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ΅
var count = Object.keys(dog).length
console.log(количСство)
// Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: 4 

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π²Π΅Π½ 4, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±Ρ‰Π΅Π΅ количСство свойств собак ΠΈ ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ… Ρ€Π°Π²Π½ΠΎ 5, Π° ΠΌΡ‹ просто соСдинили ΠΈΡ… вмСстС ΠΈ посчитали?

ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Object. keys() , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ считаСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ свои собствСнныС (пСрСчисляСмыС) свойства, Π° Π½Π΅ связанныС свойства. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ свойство fourLegs ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° animal Π½Π΅ учитываСтся Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½ΠΎ Π½Π° этот Ρ€Π°Π· ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ для Ρ†ΠΈΠΊΠ»Π° для подсчСта свойств:

 const animal = {
  Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π½ΠΎΠ³ΠΈ: ΠΏΡ€Π°Π²Π΄Π°,
}
константная собака = {
  имя: "Ная",
  возраст: 2,
  Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚",
  ΠŸΠΎΡ€ΠΎΠ΄Π°: "Π ΠΎΡ‚Π²Π΅ΠΉΠ»Π΅Ρ€ микс",
}
// Π‘Π²ΡΠ·Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ собаки с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ³ΠΎ
собака.__ΠΏΡ€ΠΎΡ‚ΠΎ__ = ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ΅
ΠΏΡƒΡΡ‚ΡŒ счСт = 0
for (свойства Π² собакС) {
  количСство = количСство + 1
}
console.log(количСство)
// Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: 5 

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ всС 5 свойств, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Object.keys() , ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ†ΠΈΠΊΠ» for , ΠΌΡ‹ подсчитываСм Ρ‡Π΅Ρ€Π΅Π· ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ свойств ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ связаны свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° .

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅.

Π’ΠΊΡ€Π°Ρ‚Ρ†Π΅:

  • БущСствуСт Π΄Π²Π° способа подсчСта количСства свойств Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» for ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ Object.keys() .
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ†ΠΈΠΊΠ» для , Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ связанныС свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² свой счСтчик свойств.
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Object.keys() , Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ пСрСчисляСмыС свойства (собствСнныС свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°).

Как ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ массивов, всСгда Π±Ρ‹Π»ΠΎ слоТно ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Ну Π½Π΅ большС! Object.keys Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив всСх пСрСчисляСмых ΠΊΠ»ΡŽΡ‡Π΅ΠΉ свойств ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. И послС этого ΠΌΠΎΠΆΠ½ΠΎ просто Π½Π°Π·Π²Π°Ρ‚ΡŒ Π΄Π»ΠΈΠ½ΠΎΠΉ , ΠΈ вуаля! Π£ вас Π΅ΡΡ‚ΡŒ Π΄Π»ΠΈΠ½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° πŸŽ‰

  • ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°
  • Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Enumerables
    • НазначСниС свойства
    • ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ свойства
    • Enumerable ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ true
    • ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΠ΅ΠΌΠΎΠ΅ Ρ€Π΅Π·ΡŽΠΌΠ΅
  • Object.Keys vs Object.GetownPropertyNames
  • Π”Π»ΠΈΠ½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с символами
  • РСсурсы

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ·Π²ΠΎΠ½ΠΈΡ‚ΡŒ

Π΄Π»ΠΈΠ½ΠΎΠΉ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅

Π’Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ интСрСсно, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ. просто Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ length прямо Π½Π° наш ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ это сдСлаСм:

Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ этого ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ свойства length . Волько строка 9ΠœΠ°ΡΡΠΈΠ²Ρ‹ 0009 ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ свойство Π΄Π»ΠΈΠ½Ρ‹ .

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Enumerables

Π₯ΠΎΡ€ΠΎΡˆΠΎ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π·Π°Ρ‚Ρ€ΠΎΠ½Π΅ΠΌ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ‚Π΅ΠΌΡƒ. Π― упомянул Π² Π½Π°Ρ‡Π°Π»Π΅, Ρ‡Ρ‚ΠΎ Object.keys Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив ΠΈΠ· пСрСчислимых ΠΊΠ»ΡŽΡ‡Π΅ΠΉ свойств. Π˜Ρ‚Π°ΠΊ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ разбСрСмся, ΠΎΡ‚ΠΊΡƒΠ΄Π° бСрСтся этот пСрСчислимый Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ .

НазначСниС свойства

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ свойство ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ запись Ρ‡Π΅Ρ€Π΅Π· Ρ‚ΠΎΡ‡ΠΊΡƒ:

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ свойства

Π’ качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Object.defineProperty . Он ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ 3 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. И ΠΈΠΌΠ΅Π½Π½ΠΎ Π² дСскрипторС свойства ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ наш пСрСчисляСмый Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚.

Π₯ΠΎΡ€ΠΎΡˆΠΎ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ свойство с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:

Π₯ΠΌΠΌΠΌ. .. странно. ΠŸΠΎΡ‡Π΅ΠΌΡƒ нашС свойство Π½Π΅ появилось πŸ€” Ну, это ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ опрСдСляСм свойство Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ enumerable ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ false . ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ отобраТался, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²Π΄Π° Π΅ΠΌΡƒ.

Enumerable ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true

Π”Π°Π²Π°ΠΉΡ‚Π΅ вСрнСмся ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ установили с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ записи Ρ‡Π΅Ρ€Π΅Π· Ρ‚ΠΎΡ‡ΠΊΡƒ. ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ½ появился автоматичСски? Ну, это ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π½Π°Π·Π½Π°Ρ‡Π°Π΅ΠΌ свойство Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ enumerable автоматичСски устанавливаСтся Ρ€Π°Π²Π½Ρ‹ΠΌ true .

Enumerable Summary

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΈΠ· нас Ρ€Π΅Π΄ΠΊΠΎ ΠΊΠ°ΡΠ°ΡŽΡ‚ΡΡ пСрСчислимого Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ нашСго свойства. Π­Ρ‚ΠΎ просто способ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ свойство, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ создали, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ ΠΈΠ»ΠΈ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ скрытым, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠžΠ±ΡŠΠ΅ΠΊΡ‚.ΠΊΠ»ΡŽΡ‡ΠΈ .

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎ пСрСчислимости, я Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ эту ΡΡ‚Π°Ρ‚ΡŒΡŽ, ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΠΌΠΎΡΡ‚ΡŒ Π² ECMAScript 6.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, пСрСчисляСмый Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для скрытия свойств, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒΡΡ. ИмСнно ΠΏΠΎ этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π² ECMAScript 1 Π±Ρ‹Π»Π° Π²Π²Π΅Π΄Π΅Π½Π° ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ.0009 , Π΄Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π² качСствС ΠΎΠΏΡ†ΠΈΠΈ для получСния Π΄Π»ΠΈΠ½Ρ‹, Object.getOwnPropertyNames .

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, Object.getOwnPropertyNames Π²Π΅Ρ€Π½Π΅Ρ‚ Π’Π‘Π• ΠΊΠ»ΡŽΡ‡ΠΈ свойств, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Object.keys Π²Π΅Ρ€Π½Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ пСрСчисляСмыС ΠΊΠ»ΡŽΡ‡ΠΈ свойств. Как я ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π» Ρ€Π°Π½Π΅Π΅, пСрСчисляСмыС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ скрыты ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅, поэтому Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π΅ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊ Π½ΠΈΠΌ доступ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Object.getOwnPropertyName ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π΅ Ρ‚Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для получСния Π΄Π»ΠΈΠ½Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Π”Π»ΠΈΠ½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с символами

Π”ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ установитС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Object.keys , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π₯ΠΎΡ‡Ρƒ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ сообраТСниС. Π’ ECMAScript 6, ES6, Π±Ρ‹Π» Π²Π²Π΅Π΄Π΅Π½ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°Π·Π²Π°Π½Π½Ρ‹ΠΉ символом .