#javascript
В просторах интернета встретил функцию, которая возвращала такое значение: return ( A < B ? +1 : (A > B ? -1 : 0)) * [-1,1][+!!reverse]; Что тут * [-1,1][+!!reverse] происходит? На что мы умножаем и что это +!!reverse делает ? Именно что + дает?
Ответы
Ответ 1
[-1,1] - массив [-1,1][0] - берем первый член массива !!reverse - приводим reverse к bool +reverse - приводим reverse к int т.е. умножаем на один из членов массива (-1, либо 1) в зависимости от значения переменной reverseОтвет 2
Выражение +!!reverse всегда дает либо 0 либо 1 (числовой эквивалент true/false если угодно). А плюс позволяет как раз привести результат выражения !!reverse к числу вне зависимости от того, чем оно было изначально (строкой, целым числом, числом с плавающей точкой, null или чем-то еще). По сути необходимость в таком в общем-то корявом синтаксисе свидетельствует о некоторой неуклюжести JavaScrip (впрочем, это диктуется динамической типизацией этого языка) Например: +!!true // 1 !!true // true +!!false // 0 !!false //false +!!null // 0 !!null // false +!!undefined// 0 !!undefined// false +!!'some' // 1 !!'some' // true +!!'10' // 1 !!'10' // true +!!10 // 1 !!10 // true
Комментариев нет:
Отправить комментарий