Мастера придумали ts и упаковали js, не считая нас новичками, как сложно понять эти приблизительные, показные и произвольные понятия. JS изучать непросто, и тогда я сделал TS. Изучив TS, я обнаружил, что могу использовать JAVA. Блин, вроде бы я что-то полностью понял.
1.??Сумма?.Сумма ||
1. Определение:
?. Необязательный оператор цепочки; при доступе к свойствам многоуровневого объекта используйте его, если он совместим с нулевыми значениями; ?? Оператор слияния нулевых значений; только когда левая часть равна нулю или не определена, будет возвращено число справа
2.?.Необязательная цепочка
При доступе к атрибутам многоуровневого объекта (например, res.data.list), если атрибут res.data пуст, будет сообщено об ошибке ссылки; по этой причине нам приходится иметь дело с этим следующим образом:
let dataList = res && res.data && res.data.list
что эквивалентно
пусть dataList = res?.data?.list
3. Совместное использование ?? и ?.
константный объект = {
а: «ххх»,
с: {
д: 'абв'
}
}
let res1 = obj?.a?.b // <=等价=> let res = obj && obj.a && obj.ab
пусть res2 = obj?.e?.f
пусть res3 = obj?.e?.f ?? '123'
пусть res4 = obj?.a?.b ?? '456'
пусть res5 = obj?.c?.d ?? '789'
console.log(res1) // не определено
console.log(res2) // не определено
console.log(res3) // 123
console.log(res4) // 456
console.log(res5) // abc
Функция состоит в том, чтобы определить, является ли значение атрибута этого объекта нулевым или неопределенным;
Когда одна из цепочек равна нулю или неопределена, возвращается неопределенное значение;
Таким образом, сообщение об ошибке не будет выдано, даже если атрибут отсутствует;
То, что следует за двойным вопросительным знаком, является значением по умолчанию.
4. Разница между ?? и ||
|| Считает 0 пустую строку ложной
?? Считать 0 пустую строку истинной
console.log(1 || "xx") //1
console.log(0 || "xx") //xx
console.log("" || "xx") //xx
console.log(1 ?? "xx") //1
console.log(0 ?? "xx") //0
console.log("" ?? "xx") //''
Использование ?? в основном такое же, как ||; однако оно игнорирует две ошибки: 0 и пустую строку.
2. Распространение синтаксиса es6
(1) Оператор расширения:…
const arr1 = [1, 2, 3];
const arr2 = [...arr1, 10, 20, 30];
// Таким образом, arr2 становится [1, 2, 3, 10, 20, 30];
(2) Метод объявления переменных: let/const
(3) Строка шаблона: ``
Переменные внутри используют ${a} для получения значения.
const name = 'Ли Ган';
константный возраст = 30;
console.log(`Я ${name}, в этом году мне ${age}`)
(4) Функция стрелки:
вар fn = функция(а, б) {
вернуть а + б;
}
метод записи es6:
const fn = (a, b) => a + b;
(5) Назначение структуры
//Сначала есть такой объект
константный реквизит = {
className: 'кнопка тигра',
загрузка: ложь,
нажал: правда,
отключено: 'отключено'
}
//es5
вар загрузки = props.loading;
вар нажал = props.clicked;
// структура синтаксического анализа es6
const {загрузка, щелчок} = реквизит;
(6) Метод определения параметра по умолчанию для функции
//es5
функция sum (a, b) {
а = а || 10;
б = б || 5;
вернуть а + б;
}
// es6
функция sum (a = 10, b = 5) {
вернуть а + б;
}
console.log(сумма(1, 2)); // 3
console.log(сумма(5)); // 10
console.log(сумма()); // 15
// Если первый параметр должен использовать значение по умолчанию, а второй параметр указан, значение первого параметра необходимо явно указать как неопределенное.
console.log(сумма(не определено, 10)); // 20
// ********Следует отметить, что если для параметра явно указано значение null, значение по умолчанию использоваться не будет.
console.log(сумма(ноль, 10)); // 10
(7) Литерал объекта
const name = 'Джейн';
константный возраст = 20
// es6
константный человек = {
имя,
возраст
}
//es5
вар человек = {
имя: имя,
возраст: возраст
};
(7) конструктор класса
ES6 предоставляет нам новый синтаксический сахар для создания объектов — синтаксис классов.
//ES5
// Конструктор
функция Person(имя, возраст) {
это.имя = имя;
this.age = возраст;
}
//Метод прототипа
Person.prototype.getName = функция() {
вернуть это.имя
}
// ES6
класс Человек {
конструктор(имя, возраст) { // конструктор
это.имя = имя;
this.age = возраст;
}
getName() { // Метод прототипа
вернуть это.имя
}
}
расширяет наследование
класс Человек {
конструктор(имя, возраст) {
это.имя = имя;
this.age = возраст;
}
getName() {
вернуть это.имя
}
}
// Класс Student наследует класс Person
класс Student расширяет Person {
конструктор(имя, возраст, пол, классы) {
super(name, age); // Объявляем наследование атрибутов от родительского класса; эквивалентно получению указателя this родительского класса
this.gender = гендер; // Собственный приватный атрибут
this.classes =classes; // Собственные частные свойства
}
getGender() { // Собственный приватный метод
верните этот.пол;
}
}