int*a;
int* a;
int *a;
int * a;
int * a, * b, c, * d, e; // a, b и d - указатели, c и e - числа
int *a, *b; // нормально
int* a, b; // Ошибка: b кажется указателем, но на самом деле - число.
&&
вычисляет слева направо каждый из своих операндов. Результат вычисление операнда приводится к булевому типу и если он true, переходит к вычислению следующего операнда. Операция повторяется до тех пор, пока результат вычисления очередного операнда не будет false, если это так, то возвращается результат вычисления данного операнда и цепочка обрывается.1 && 2 && 3 && 4 && 5 // 5
1 && 2 && 0 && 4 && 5 // 0
confirm(1) && confirm(2) && confirm(3)
||
похожая картина. Отличие в том, что цепочка операндов будет выполняться до первого истинного операнда1 || 2 || 3 || 4 || 5 // 1
0 || false || !!0 || 5 || true || !!1 //5
confirm(1) || confirm(2) || confirm(3)
&&
и ||
не возвращают true или false. Они возвращают результат вычисления одного из своих операндов. При одинаковой длине ключей, симметричных и асимметричных, криптостойкость алгоритмов разная. И криптостойкость симметричных выше. Асимметричных ниже. ...
Как это объяснить?
var clickRef = function() {
console.log('clicked');
document.getElementById("demo").innerHTML = "Hello World!";
};
document.addEventListener("click", clickRef);
...
document.removeEventListener("click", clickRef);
спойлер: 3432
399072960
html{
font-size: 62.5%;
}
body {
font-size: 1.6rem;
}
const object = {};
const newArray = []
arr1.forEach(item => object[item.id] = item) // перегоняем первый массив в объект, где ключи объекта id элемента
arr2.forEach(item => {
const objectItem = object[item.id];
if (objectItem !== undefined) {
const mergeItem = Object.assign({}, objectItem, item);
newArray.push(mergeItem);
object[item.id] = undefined;
}
})
Это будет быстрее чем вложенный цикл по второму массиву.