Страницы

Поиск по вопросам

среда, 25 декабря 2019 г.

JavaScript непонятный синтаксис

#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

Комментариев нет:

Отправить комментарий