Символ Новый примитивный тип данных, представляющий уникальность. Это седьмой тип данных в JavaScript. Остальные шесть :
. Значения символов генерируются с помощью функции символа. Существует два типа имен атрибутов объектов: один — исходная строка, а другой — новый тип символа . Имена атрибутов относятся к типу «Символ» и уникальны, что гарантирует, что они не будут конфликтовать с именами других атрибутов.
пусть s1=Символ() пусть s2=Символ() консоль.log(s1) //Символ() консоль.журнал(s2) //Символ() console.log(s1===s2) //ЛОЖЬ //Функция символа может принимать строку в качестве параметра, указывающую описание экземпляра символа. let s1=Symbol('xxx') пусть s2=Символ('ххх') консоль.log(s1) //Символ(ххх) консоль.журнал(s2) //Символ(ххх) console.log(s1===s2) //falseВы не можете использовать новую команду до копирования
функции символа кода, и будет сообщено об ошибке. Это связано с тем, что сгенерированный символ является значением примитивного типа, а не объектом. То есть, поскольку значения символов не являются объектами, свойства добавлять нельзя. Эквивалент специальной строки.
Символ.for() принимает строку в качестве параметра, а затем ищет значение символа с параметром в качестве имени. Если есть, верните значение символа, в противном случае создайте новое значение символа со строкой в качестве имени и зарегистрируйте его глобально.
пусть s1 = Символ.for('xxx') пусть s2 = Символ.for('xxx') console.log(s1 === s2) // верно функция фу(){ вернуть символ.for('привет') } константа х=фу() const y=Symbol.for('привет') console.log(x === y)//true
Символы.for() и Символ() сгенерируют новый Символ. Разница в том, что первый будет зарегистрирован в глобальной среде поиска, а второй — нет. Symbol.for() не будет возвращать новое значение типа символа при каждом вызове. Вместо этого он сначала проверит, существует ли данный ключ, а затем создаст новое значение, если он не существует.
Метод Символ.keyFor() возвращает ключ зарегистрированного значения типа Символ.
const s1 = Символ('foo') console.log(Symbol.keyFor(s1)) // не определено const s2 = Символ.for('foo') console.log(Symbol.keyFor(s2)) //
. Поскольку значения символов не равны, это означает, что значения символов могут использоваться в качестве идентификаторов и использоваться в именах атрибутов. объектов , чтобы гарантировать, что они не появятся. Атрибут с таким же именем появится. Это полезно, когда объект состоит из нескольких модулей, чтобы предотвратить случайную перезапись или перезапись ключа.
константная оценка={ Чжан Сан: {адрес: 'qqq', тел: '111'}, Ли Си: {адрес: 'ааа', тел: '222'}, Ли Си: {адрес: 'сссс', тел: '333'}, } console.log(оценка) //Чжан Сан: {адрес: "qqq", тел: "111"} Ли Си: {адрес: "sss", тел: "333"} //Значение ключа объекта не может быть повторено. Если есть повторение, последующее значение значения перезапишет предыдущее //Используйте символ для решения, который эквивалентен уникальной строке const stu1=Symbol('李思') const stu2=Символ('李思') console.log(stu1===stu2) //ЛОЖЬ константная оценка={ [stu1]:{адрес:'aaa',тел:'222'}, [stu2]:{адрес:'sss',тел:'333'}, } console.log(оценка) //Джон Доу: {адрес:'sss',тел:'222'} Джон Доу: {адрес:'sss',тел:'333'} console.log(класс[stu1]) //Ли Си: {адрес:'sss',тел:'222'} console.log(класс[stu2]) //Li Si: {address:'sss',tel:'333'}
const sym=Symbol('imooc') класс Пользователь { конструктор(имя){ this.name=имя это[sym]='imooc.com' } getName(){ вернуть это.имя+это[сим] } } const user=новый пользователь('www') //Метод for in не может перейти к атрибуту символа, поскольку он скрыт for(let key in user){ console.log(ключ)//имя } //Метод Object.keys(obj) не может перейти к свойству символа for(let key of Object.keys(user)){ console.log(ключ)//имя } //Object.getOwnPropertySymbols(obj) может получить только свойство символа for(let key of Object.getOwnPropertySymbols(user)){ console.log(ключ)//Символ(imooc) } //Свойства объекта Reflect.ownKeys(obj) можно получить for(let key of Reflect.ownKeys(user)){ console.log(ключ) //имя //Символ(imoc) }
Волшебные строки относятся к определенной строке или значению, которое появляется в коде несколько раз и образует прочную связь с кодом. В хорошем стиле кода следует попытаться устранить магические строки и заменить их переменными с ясным значением.
функция getArea(форма) { пусть площадь = 0 переключатель (форма) { корпус «Треугольник»: площадь=1 перерыв корпус «Круг»: площадь=2 перерыв } зона возврата } console.log(getArea('Треугольник')) //Треугольник и круг — волшебные строки. Он появляется много раз, образуя «сильную связь» с кодом, что не способствует последующей модификации и сопровождению. const shapeType = { треугольник: Символ(), круг: Символ() } функция getArea(форма) { пусть площадь = 0 переключатель (форма) { корпус shapeType.triangle: площадь=1 перерыв корпус shapeType.круг: площадь=2 перерыв } зона возврата } console.log(getArea(shapeType.triangle))
Я новичок в интерфейсной части. Если в статье есть какая-либо ошибка, дайте мне совет и обсудите ее!
[Рекомендация по соответствующему видеоуроку: веб-интерфейс]
Выше приведено подробное содержание изучения типов данных JavaScript и краткий анализ типа символов. Для получения дополнительной информации обратите внимание на другие соответствующие статьи на китайском веб-сайте PHP!