
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!