Símbolo Un nuevo tipo de datos primitivo que representa la unicidad. Es el séptimo tipo de datos en JavaScript.
Los otros seis son:indefinido, nulo, cadena, número y objeto
. Los valores de símbolo se generan a través de la función Símbolo. Hay dos tipos de nombres de atributos de objetos, uno es la cadena original y el otro es el nuevo tipo de símbolo . Los nombres de atributos son del tipo Símbolo y son únicos, lo que garantiza que no entrarán en conflicto con otros nombres de atributos.
sea s1=Símbolo() sea s2=Símbolo() consola.log(s1) //Símbolo() consola.log(s2) //Símbolo() consola.log(s1===s2) //FALSO // La función de símbolo puede aceptar una cadena como parámetro, lo que indica la descripción de la instancia de símbolo let s1=Symbol('xxx') sea s2=Símbolo('hhh') consola.log(s1) //Símbolo(xxx) consola.log(s2) //Símbolo(hhh) consola.log(s1===s2) //falseNo puede utilizar el nuevo comando antes de copiar el código de la
función Símbolo y se informará un error. Esto se debe a que el símbolo generado es un valor de tipo primitivo, no un objeto. Es decir, dado que los valores de los símbolos no son objetos, no se pueden agregar propiedades. Equivalente a una cadena especial.
Symbol.for() acepta una cadena como parámetro y luego busca un valor de Symbol con el parámetro como nombre. Si lo hay, devuelva el valor del Símbolo; de lo contrario, cree un nuevo valor de Símbolo con la cadena como nombre y regístrelo globalmente.
let s1 = Símbolo.for('xxx') let s2 = Símbolo.for('xxx') console.log(s1 === s2) // verdadero función foo(){ devolver Símbolo.for('hola') } constante x=foo() const y=Símbolo.for('hola') console.log(x === y)//true
Symbol.for() y Symbol() generarán un nuevo símbolo. La diferencia es que los primeros quedarán registrados en el entorno global de búsqueda, mientras que los segundos no. Symbol.for() no devolverá un nuevo valor de tipo Símbolo cada vez que se llame. En cambio, primero verificará si la clave dada ya existe y luego creará un nuevo valor si no existe.
El método Symbol.keyFor() devuelve la clave de un valor de tipo Símbolo registrado.
const s1 = Símbolo('foo') console.log(Symbol.keyFor(s1)) // indefinido const s2 = Símbolo.for('foo') console.log(Symbol.keyFor(s2)) //
. Dado que los valores de los símbolos no son iguales, esto significa que los valores de los símbolos se pueden usar como identificadores y en los nombres de los atributos. de objetos para garantizar que no aparezcan. Aparece un atributo con el mismo nombre. Esto es útil cuando un objeto se compone de varios módulos, para evitar que una clave se sobrescriba o se sobrescriba accidentalmente.
calificación constante = { Zhang San:{dirección:'qqq',tel:'111'}, Li Si:{dirección:'aaa',tel:'222'}, Li Si:{dirección:'sss',tel:'333'}, } console.log(grado) //Zhang San: {dirección: "qqq", tel: "111"} Li Si: {dirección: "sss", tel: "333"} // El valor clave del objeto no se puede repetir. Si hay una repetición, el valor posterior sobrescribirá el anterior // Use el símbolo para resolver, lo que equivale a una cadena única const stu1=Symbol('李思') const stu2=Símbolo('李思') consola.log(stu1===stu2) //FALSO calificación constante = { [stu1]:{dirección:'aaa',tel:'222'}, [stu2]:{dirección:'sss',tel:'333'}, } console.log(grado) //John Doe: {dirección:'sss',tel:'222'} John Doe: {dirección:'sss',tel:'333'} console.log(grado[stu1]) //Li Si: {dirección:'sss',tel:'222'} console.log(grado[stu2]) //Li Si: {dirección:'sss',tel:'333'}
const sym=Symbol('imooc') usuario de clase { constructor(nombre){ este.nombre=nombre esto[sym]='imooc.com' } obtenerNombre(){ devolver este.nombre+este[sym] } } usuario constante = nuevo usuario ('www') //El método for in no puede atravesar el atributo Símbolo ya que está oculto for(let key in user){ console.log(clave)//nombre } //El método Object.keys(obj) no puede atravesar la propiedad Symbol for(let key of Object.keys(user)){ console.log(clave)//nombre } //Object.getOwnPropertySymbols(obj) solo puede obtener la propiedad Symbol for(let key of Object.getOwnPropertySymbols(user)){ console.log(clave)//Símbolo(imooc) } // Las propiedades del objeto Reflect.ownKeys(obj) se pueden obtener for(let key of Reflect.ownKeys(user)){ consola.log(clave) //nombre //Símbolo(imooc) }
Las cadenas mágicas se refieren a una cadena o valor específico que aparece varias veces en el código y forma un fuerte acoplamiento con el código. El código con buen estilo debería intentar eliminar las cadenas mágicas y reemplazarlas con variables con significados claros.
función obtenerÁrea(forma) { deja área = 0 cambiar (forma) { caso 'Triángulo': área=1 romper caso 'Círculo': área=2 romper } zona de retorno } console.log(getArea('Triángulo')) //Triángulo y Círculo son hilos mágicos. Aparece muchas veces, formando un "fuerte acoplamiento" con el código, lo que no propicia modificaciones y mantenimiento posteriores. tipo de forma constante = { triángulo: símbolo(), círculo: Símbolo() } función obtenerÁrea(forma) { deja área = 0 cambiar (forma) { forma del casoTipo.triángulo: área=1 romper forma del casoTipo.círculo: área=2 romper } zona de retorno } console.log(getArea(shapeType.triangle))
Soy un novato en front-end. Si hay algún error en el artículo, ¡dame algún consejo y discusión!
[Recomendación de video tutorial relacionado: interfaz web]
Lo anterior es el contenido detallado del aprendizaje del tipo de datos de JavaScript y un breve análisis del tipo de símbolo. Para obtener más información, preste atención a otros artículos relacionados en el sitio web chino de PHP.