{"id":770,"date":"2024-07-30T20:53:55","date_gmt":"2024-07-30T18:53:55","guid":{"rendered":"https:\/\/blog.sutilweb.eu\/?page_id=770"},"modified":"2024-07-30T20:53:55","modified_gmt":"2024-07-30T18:53:55","slug":"001-symbols","status":"publish","type":"page","link":"https:\/\/sutilweb.eu\/index.php\/lenguajes\/javascript\/javascript-practico\/09-nuevos-tipos-y-caracteristicas-en-javascript\/001-symbols\/","title":{"rendered":"001. Symbols"},"content":{"rendered":"\n<p>Los siguientes cap\u00edtulos van a estar orientados a ver nuevos tipos de datos que existen en <strong>Javascript<\/strong>, que los hemos dejado hasta estos cap\u00edtulos para no confundir con las nociones b\u00e1sicas del lenguaje.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Estos nuevos tipos de datos se dan a partir de est\u00e1ndar 2015 con <strong>ES6<\/strong>. Para estudiar estos nuevos tipos de datos que iremos desgranando a lo largo de estos cap\u00edtulos nos vamos a ayudar mucho de la <strong>consola<\/strong> para ver como funcionan las caracter\u00edsticas de estos nuevos tipos de datos.<\/p>\n\n\n\n<p>El primer nuevo tipo de dato que vamos a ver son los <strong>symbols<\/strong>. <strong>Symbol<\/strong> es un tipo de <strong>dato primitivo<\/strong>, como lo son los <strong>strings<\/strong>, <strong>numbers<\/strong>, <strong>booleans<\/strong>&#8230; introducido despu\u00e9s de <strong>ES6<\/strong>, y es muy peculiar. Una vez que declaramos un tipo de dato como <strong>symbol<\/strong>, su valor se va a mantener privado y para uso interno. Generalmente los <strong>symbols<\/strong> suelen agregarse como <strong>caracter\u00edsticas de objetos<\/strong>, como una propiedad del mismo, y se va a mantener privada.<\/p>\n\n\n\n<p>Para la declaraci\u00f3n de un <strong>symbol<\/strong> no podemos usar el operador <strong><em>new<\/em><\/strong>, sino que directamente mandamos a llamar a la <strong>funci\u00f3n constructora<\/strong>, que se denomina <strong><em>symbol()<\/em><\/strong>.<\/p>\n\n\n\n<p>Los <strong>symbols<\/strong> nos permiten crear <strong>identificadores \u00fanicos<\/strong>, <strong>identificadores de referencia<\/strong>. La forma de crearlos es la siguiente.<\/p>\n\n\n\n<p><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">let id = Symbol(\"id\");\nlet id2 = Symbol(\"id2\");<\/pre>\n\n\n\n<p>Los <strong>symbols<\/strong> aceptan como par\u00e1metros un n\u00famero o una cadena de texto, y esos par\u00e1metros son una descripci\u00f3n de los mismos, se utilizan a modo de descripci\u00f3n para poder identificar a dicho <strong>s\u00edmbolo<\/strong>.<\/p>\n\n\n\n<p><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">let id = Symbol(\"id\");\nlet id2 = Symbol(\"id2\");\n\nconsole.log(id, id2);\nconsole.log(typeof id, typeof id2);\n\/\/ Nos retorna un tipo de dato primitivo<\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Nota<\/strong>: Los <strong>s\u00edmbolos <\/strong>suelen declararse para identificar las <strong>propiedades<\/strong> de <strong>objetos<\/strong>, para evitar colisiones entre <strong>propiedades<\/strong> que pudi\u00e9ramos sobreescribir.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Agregar un symbol a un objeto<\/h2>\n\n\n\n<p>Lo ideal es declararlo en MAY, como si fuera una <strong>constante<\/strong>, ya que es un tipo de dato que en teor\u00eda no va a cambiar.<\/p>\n\n\n\n<p><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">const NOMBRE = Symbol()\n\nconst persona = {\n[NOMBRE]: \"Francisco\",\n\n};<\/pre>\n\n\n\n<p>Dentro de un objeto lo tenemos que incluir entre <strong>corchetes<\/strong>, y de esta manera hemos&nbsp; construido el <strong>s\u00edmbolo<\/strong>. Veamos como imprimir este objeto.<\/p>\n\n\n\n<p><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">console.log(persona);<\/pre>\n\n\n\n<p>Nos indicar\u00e1 que hay un tipo de dato que es <strong>symbol<\/strong>.<\/p>\n\n\n\n<p>Despu\u00e9s de crear nuestro <strong>s\u00edmbolo<\/strong> vamos a crear una <strong>propiedad<\/strong> con el mismo nombre, y vemos lo que ocurre.<\/p>\n\n\n\n<p><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">persona.NOMBRE = \"Francisco Paredes\";\n\nconsole.log(persona);\n\/\/ Imprimir\u00e1 el symbol por un lado y la propiedad NOMBRE por otro<\/pre>\n\n\n\n<p><strong>Ejm completo<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">constNOMBRE = Symbol(\"nombre\");\n\nconstpersona = {\n [NOMBRE]:\"Francisco\",\n}\n\nconsole.log(persona);\n\npersona.NOMBRE = \"Francisco Paredes\";\n\nconsole.log(persona);<\/pre>\n\n\n\n<p>Para mandar a llamar a un <strong>symbol<\/strong> tenemos que utilizar, no la <strong>notaci\u00f3n del punto<\/strong>, sino la <strong>notaci\u00f3n de los corchetes<\/strong>, de la siguiente forma.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">console.log(persona[NOMBRE]);<\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Nota<\/strong>: Los <strong>symbols<\/strong> funcionan como si fueran <strong>propiedades privadas<\/strong>. Esta propiedad nos la facilita <strong>Javascript<\/strong> para poder ocultar ciertos datos.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Crear m\u00e9todos que hacen referencia a un symbol<\/h2>\n\n\n\n<p>Para crear <strong>metodos<\/strong> dentro de un <strong>objeto<\/strong> que hagan <strong>referencia<\/strong> a un <strong>symbol<\/strong>, hacemos lo siguiente.<\/p>\n\n\n\n<p><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">cont SALUDAR = Symbol(\"saludar\");\n\npersona[SALUDAR] = function() {\n   console.log(\"Hola que tal\");\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Llamar a un m\u00e9todo tipo symbol de un objeto<\/h2>\n\n\n\n<p>La sintaxis ser\u00eda la siguiente.<\/p>\n\n\n\n<p><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">console.log(persona);\npersona[SALUDAR]();<\/pre>\n\n\n\n<p>Los <strong>par\u00e9ntesis<\/strong> van fuera de los <strong>corchetes<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Recorrer las propiedades de un objeto que incluye symbols<\/h2>\n\n\n\n<p>Veamos un ejm para entenderlo.<\/p>\n\n\n\n<p><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">for(let propiedad in persona) {\n   console.log(propiedad);\n   console.log(persona[propiedad);\n}<\/pre>\n\n\n\n<p>No va a imprimir los <strong>symbols<\/strong>, ya que estos se comportan como <strong>propiedades privadas<\/strong>, por lo que no se van a imprimir en pantalla.<\/p>\n\n\n\n<p>Para ver todos los elementos, incluyendo los <strong>symbols<\/strong>, existe un <strong>m\u00e9todo<\/strong>, que cuelga de <strong>Object<\/strong>. Veamos la sintaxis que tendr\u00edamos que utilizar.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">console.log(Object.getOwnPropertySymbols(persona));\n\/\/ Nos muestra la lista de symbols que tengamos a manera de Array<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Resumen<\/h2>\n\n\n\n<p>La mayor\u00eda de los usos de <strong>symbol<\/strong> es crear elementos privados dentro de un <strong>objeto<\/strong>, y que tambi\u00e9n su <strong>referencia<\/strong> va a ser \u00fanica.<\/p>\n\n\n\n<p><strong>Ejm completo<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">const NOMBRE = Symbol(\"nombre\");\nconst SALUDAR = Symbol(\"saludar\");\n\nconst persona = {\n   [NOMBRE]:\"Francisco\",\n   NOMBRE:\"Francisco Paredes\",\n   edad:22,\n   SALUDAR]:function(){\n      console.log(`Hola, me llamo ${[NOMBRE]}`);\n   }\n}\n\nfor (const propiedad in persona) {\n   console.log(propiedad);\n   console.log(persona[propiedad]);\n}\n\n\/\/ Mostrar todos los symbols del objeto persona\nconsole.log(Object.getOwnPropertySymbols(persona));<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Los siguientes cap\u00edtulos van a estar orientados a ver nuevos tipos de datos que existen en Javascript, que los hemos [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":766,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-770","page","type-page","status-publish","hentry"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"Sutil Web","author_link":"https:\/\/sutilweb.eu\/index.php\/author\/sutilweb\/"},"uagb_comment_info":0,"uagb_excerpt":"Los siguientes cap\u00edtulos van a estar orientados a ver nuevos tipos de datos que existen en Javascript, que los hemos [&hellip;]","_links":{"self":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/770","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/comments?post=770"}],"version-history":[{"count":2,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/770\/revisions"}],"predecessor-version":[{"id":772,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/770\/revisions\/772"}],"up":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/766"}],"wp:attachment":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/media?parent=770"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}