Признаю, действительно -0. Вопрос какого х*я?? Массив будет приведен к 0. Объект же е строке обжект обжект, которая далее станет NaN, итог NaN. Где ошибка в рассуждении?..
@@localhost666 без скобок {} определяется как блок (block statement), а со скобками как объект. Это особенности синтаксического разбора. К примеру, если это выражение присваивать через = переменной, парсеру однозначно понятно что {} не блок и будет тоже NaN.
По приведению массива к 0. Сначала возвращается пустая строка "", затем приведение пустой строки к числу (из-за +) даст 0. См. про методы valueOf и toString. Можно вот так "хакнуть" const array = [] array.valueOf = () => { return 42 } console.log(array + 5) // 47
Отличное объяснение. Без воды и подробно. Спасибо докладчику.
Единственное названия переменных сделаны на коленке
Чел на час размазал простую мысль о том, что нельзя присвоить тип "а" туда где ожидается тип "б". Браво
{} - [] будет NaN, а не -0
Зависит от контекста в котором это выражение находится. {} - [] вернёт -0, ({} - []) вернёт NaN
@@mukhindev а в чем собственно разница данных выражений?
Признаю, действительно -0.
Вопрос какого х*я??
Массив будет приведен к 0.
Объект же е строке обжект обжект, которая далее станет NaN, итог NaN.
Где ошибка в рассуждении?..
@@localhost666 без скобок {} определяется как блок (block statement), а со скобками как объект. Это особенности синтаксического разбора.
К примеру, если это выражение присваивать через = переменной, парсеру однозначно понятно что {} не блок и будет тоже NaN.
По приведению массива к 0. Сначала возвращается пустая строка "", затем приведение пустой строки к числу (из-за +) даст 0. См. про методы valueOf и toString.
Можно вот так "хакнуть"
const array = []
array.valueOf = () => {
return 42
}
console.log(array + 5) // 47