var search = "hello";
$(`li:contains(${search})`).css('background-color', 'red');
const arr = [1,2,3,4];
const obj = [{id:3},{id:5},{id:6}];
const b = obj.map(o => o.id); // получили [3, 5, 6]
const i = b.filter(el => !arr.includes(el));
const o = arr.filter(el => !b.includes(el));
console.log(`из arr удалено ${o.join(',')} и добавлено ${i.join(',')}`);
// из arr удалено 1,2,4 и добавлено 5,6
const diff = (a,b) => ({
i: b.filter(x => !a.includes(x)), // in
o: a.filter(x => !b.includes(x)), // out
});
const data = diff(arr, obj.map(el => el.id));
console.log(`из arr удалено ${data.o.join(',')} и добавлено ${data.i.join(',')}`);
[...newRow.querySelectorAll('input')].forEach(el => el.value = '')
sum()
возвращает функцию f
.f()
тоже возвращает функцию f
.alert()
ожидает именно строку, а не функцию и не объект.f
определён «волшебный» метод toString()
.sum()
, а при последующих вызовах f()
это значение по-прежнему «видно». // jQuery
$el.slideUp();
$el.slideDown();
// Нативно
const originHeight = '100px';
el.style.transition = 'height 3s';
// slideUp
el.style.height = '0px';
// slideDown
el.style.height = originHeight;
Ctrl + Shift + J
в Chrome Ctrl + Shift + K
в FireFox.fetch()
надо ждать.var s = "36.000";
console.log(typeof s); // string
var n = +s;
console.log(typeof n); // number
console.log(n); // 36 нули после точки и не будет показывать – зачем
// показать ровно X позиций числа после точки:
var formatted = n.toFixed(3);
console.log(formatted); // 36.000 но это опять строка!
console.log(typeof formatted); // string
uncaught exception: We found an infinite loop in your Pen. We've stopped the Pen from running. Please correct it or contact support@codepen.io.
for(var i = 0; a.length; i++) {
// должно быть
for(var i = 0; i < a.length; i++) {
Date.parse()
съест и поймёт такую запись.const d = new Date('2020-02-14T11:40:44+03:00');
d.getFullYear(); // 2020
d.getMonth(); // 1 – месяцы считаются от 0 = январь
var a = document.getElementsByClassName('nosub');
назначает переменной a
значение: коллекцию HTML элементов. Если следующей строкой в консоли введёте просто a
, появится «подсказка» такая же как в первом варианте.for
, или методами массивов, например, forEach()
:[ ...document.getElementsByClassName('nosub')].forEach( el => el.style.display = "none" );
[...HTMLCollection]
это один из способов сделать из коллекции нормальный массив со всеми его методами, включая forEach()
. Подробнее см. spread syntax const handler = (e) => {
e.preventDefault();
const active = document.querySelector('.form-login__header-link.active');
const target = e.target;
if (target === active) return;
[register, login].forEach(el => el.classList.toggle('active'));
[...formContainer].forEach( el => el.classList.toggle('none'));
}
login.addEventListener('click', handler);
register.addEventListener('click', handler);
e.target
– кликнутый элемент. console.log()
.this
– ваш объект, а где становится «вдруг» window
:console.log("внутри timeout", this);
(callback) => { ... }
от обычных function() { ... }
this.response = function() { .. тут собственный this.. }
Когда передаёте аргументом ..(t.response)
, он улетает из контекста Window, поэтому в нём this == window
. this.response = () => { .. тут this на момент обращения к нему .. }
callback()
или this.data = "Steve Jobs"
?function test() {
this.data = null;
this.response = function() {
console.log(this, this.data);
}
this.connect = function(callback) {
setTimeout(() => {
this.data = "Steve Jobs";
callback.call(this);
}, 500);
}
}
t = new test();
t.connect(t.response);