Когда я занимался php, я заметил, что следующие выражения дают странные результаты:
011 == 11 // false
'011' == 11 // true
Разве они не должны оценивать один и тот же результат?
Ответ 1
Это связано с тем, что 011 рассматривается как восьмеричное значение из-за ведущего 0.
Здесь более подробное объяснение:
Литерал 011 распознается как восьмеричное значение
Затем преобразуется в десятичное значение, что равно 9
Происходит фактическое сравнение, которое выглядит следующим образом: 9 == 11 // false
Как и в случае '011' == 11, он оценивается как true, потому что, когда строка сравнивается с целым числом, она также принудительно приводит к целочисленному значению. Интересно, что начальный ноль в строке игнорируется в процессе, а интерпретатор php обрабатывает значение десятичное, а не восьмеричное!