Símbolo Um novo tipo de dados primitivo que representa exclusividade. É o sétimo tipo de dados em JavaScript.
Os outros seis são:indefinidos, nulos, String, Número e Objeto
. Os valores do símbolo são gerados por meio da função Símbolo. Existem dois tipos de nomes de atributos de objetos, um é a string original e o outro é o novo tipo de símbolo . Os nomes dos atributos são do tipo Símbolo e são exclusivos, garantindo que não entrarão em conflito com outros nomes de atributos.
deixe s1=Símbolo() deixe s2=Símbolo() console.log(s1) //Símbolo() console.log(s2) //Símbolo() console.log(s1===s2) //falso //A função Símbolo pode aceitar string como parâmetro, indicando a descrição da instância do Símbolo let s1=Symbol('xxx') deixe s2=Símbolo('hhh') console.log(s1) //Símbolo(xxx) console.log(s2) //Símbolo(hhh) console.log(s1===s2) //falseVocê não pode usar o novo comando antes de copiar o código
da função Símbolo e um erro será relatado. Isso ocorre porque o Símbolo gerado é um valor de tipo primitivo, não um objeto. Ou seja, como os valores do símbolo não são objetos, as propriedades não podem ser adicionadas. Equivalente a uma string especial.
Symbol.for() aceita uma string como parâmetro e, em seguida, procura um valor de Símbolo com o parâmetro como seu nome. Se houver, retorne o valor do Símbolo, caso contrário, crie um novo valor do Símbolo com a string como nome e registre-o globalmente.
deixe s1 = Símbolo.for('xxx') deixe s2 = Símbolo.for('xxx') console.log(s1 === s2) // verdadeiro função foo(){ retornar Símbolo.for('olá') } const x=foo() const y=Symbol.for('olá') console.log(x === y)//true
Symbol.for() e Symbol() gerarão um novo símbolo. A diferença é que o primeiro será cadastrado no ambiente global para busca, enquanto o segundo não. Symbol.for() não retornará um novo valor do tipo Símbolo toda vez que for chamado. Em vez disso, primeiro verificará se a chave fornecida já existe e, em seguida, criará um novo valor se não existir.
O método Symbol.keyFor() retorna a chave de um valor registrado do tipo Símbolo.
const s1 = Símbolo('foo') console.log(Symbol.keyFor(s1)) // indefinido const s2 = Símbolo.for('foo') console.log(Symbol.keyFor(s2)) //
. Como os valores do símbolo não são iguais, isso significa que os valores do símbolo podem ser usados como identificadores e usados nos nomes dos atributos. de objetos para garantir que eles não apareçam. Um atributo com o mesmo nome aparece. Isso é útil quando um objeto é composto por vários módulos, para evitar que uma chave seja sobrescrita ou sobrescrita acidentalmente.
nota const={ Zhang San:{endereço:'qqq',tel:'111'}, Li Si:{endereço:'aaa',tel:'222'}, Li Si:{endereço:'sss',tel:'333'}, } console.log(nota) //Zhang San: {endereço: "qqq", tel: "111"} Li Si: {endereço: "sss", tel: "333"} //O valor da chave do objeto não pode ser repetido. Se houver uma repetição, o valor do valor subsequente substituirá o anterior //Use o símbolo para resolver, o que é equivalente a uma string única const stu1=Symbol('李思') const stu2=Símbolo('李思') console.log(stu1===stu2) //falso nota const={ [stu1]:{endereço:'aaa',tel:'222'}, [stu2]:{endereço:'sss',tel:'333'}, } console.log(nota) //John Doe: {endereço:'sss',tel:'222'} John Doe: {endereço:'sss',tel:'333'} console.log(nota[stu1]) //Li Si: {endereço:'sss',tel:'222'} console.log(nota[stu2]) //Li Si: {address:'sss',tel:'333'}
const sym=Symbol('imooc') classe Usuário{ construtor(nome){ este.nome=nome isto[sym]='imooc.com' } getNome(){ retorne este.nome+isto[sym] } } const usuário=novo usuário('www') //O método for in não pode passar para o atributo Symbol porque está oculto for(let key in user){ console.log(chave)//nome } //O método Object.keys(obj) não pode passar para a propriedade Symbol for(let key of Object.keys(user)){ console.log(chave)//nome } //Object.getOwnPropertySymbols(obj) só pode obter a propriedade Symbol for(let key of Object.getOwnPropertySymbols(user)){ console.log(chave)//Símbolo(imooc) } //Reflect.ownKeys(obj) propriedades do objeto podem ser obtidas for(let key of Reflect.ownKeys(user)){ console.log(chave) //nome //Símbolo(imooc) }
Strings mágicas referem-se a uma string ou valor específico que aparece diversas vezes no código e forma um forte acoplamento com o código. Código com bom estilo deve tentar eliminar strings mágicas e substituí-las por variáveis com significados claros.
function getArea(forma) { deixe área = 0 mudar (forma) { caso 'Triângulo': área=1 quebrar caso 'Círculo': área=2 quebrar } área de devolução } console.log(getArea('Triângulo')) //Triângulo e Círculo são cordas mágicas. Ele aparece muitas vezes, formando um “forte acoplamento” com o código, o que não favorece modificações e manutenções posteriores. const shapeType = { triângulo: Símbolo(), círculo: Símbolo() } function getArea(forma) { deixe área = 0 mudar (forma) { caso shapeType.triangle: área=1 quebrar caso shapeType.circle: área=2 quebrar } área de retorno } console.log(getArea(shapeType.triangle))
Sou um novato em front-end. Se houver algum erro no artigo, por favor, me dê alguns conselhos e discussões!
[Recomendação de tutorial em vídeo relacionado: front-end da web]
O conteúdo acima é o conteúdo detalhado do aprendizado do tipo de dados JavaScript e uma breve análise do tipo Símbolo. Para obter mais informações, preste atenção a outros artigos relacionados no site PHP chinês!