.freeze{
overflow: hidden;
}
Нужно каждое слово оборачивать в %?
WHERE name LIKE '%сок%перс%'
, конечно, не пропустит указанные нежелательные записи - но и "Персиковый сок" тоже будет отброшен.SELECT *
FROM table
WHERE name LIKE '%сок%'
AND name LIKE '%перс%';
p:nth-last-child(4) {
color: red;
}
div > p:nth-last-child(1)
update t set
time_from = LOWER(time_from),
nullable = IF(nullable is null or nullable = '', 1, nullable)
;
name
и age
указывают на массивы, а они, как и любые объекты в JavaScript, передаются «по ссылке», т.е. передаётся указатель на место в памяти, где лежит массив. Прочитайте по ссылке «по ссылке» : ) — там действительно подробно и с картинками описывают проблему.this.save
оказываются те же самые массивы, что и в obj
. Меняете там, меняется тут, и наоборот. Разорвать порочную связь можно, например, грубоватым и не самым эффективным способом:const obj_copy = JSON.parse(JSON.stringify( obj ));
// создали действительно независимую «глубокую копию» объекта
Для нехитрого объекта без функций-методов и всяких Map/Set'ов это годится. ${ }
можно помещать не любой код, а выражения. Что-то, имеющее значение: `Привет, ${ ["м", "р"].join("и") }!`
...
- spread/rest оператор. spread
раскрывает массив в список аргументов, но также например можно использовать для расширения массивов.const arr = [1, 2, 3]
func.apply(...arr) // [1, 2, 3] -> 1, 2, 3
const arr = [1, 2, 3]
const arr2 = [...arr, 4, 5]
rest
наоборот собирает аргументы в массив.function func(...args) {
for (let arg of args) console.log(arg)
}
const obj = {a: 10, b: 20}
const obj2 = {...obj} // {a: 10, b: 20}