Kiedy praktykujący w php, zauważyłem, że następujące wyrażenia uzyskując dziwne wyniki:Dlaczego wyrażenie 011 == 11 ocenia jako fałszywe?
011 == 11 // false
'011' == 11 // true
Nie powinny one zarówno do oceny samego rezultatu?
Kiedy praktykujący w php, zauważyłem, że następujące wyrażenia uzyskując dziwne wyniki:Dlaczego wyrażenie 011 == 11 ocenia jako fałszywe?
011 == 11 // false
'011' == 11 // true
Nie powinny one zarówno do oceny samego rezultatu?
Jest tak, ponieważ jest traktowany jako wartość ósemkowa ze względu na wiodącą 0
.
Oto bardziej wyjaśnienie dogłębne:
011
dosłowny jest rozpoznawana jako ósemkowym wartość9
9 == 11 // false
Od wersji '011' == 11
wartość ta jest równa true
, ponieważ gdy łańcuch jest porównywany z liczbą całkowitą, jest również przekształcany na wartość całkowitą. Co ciekawe, początkowe zero w łańcuchu jest ignorowane w procesie, a interpreter php traktuje wartość jako dziesiętną zamiast ósemkową!
Bardzo ładne wyjaśnienie. –
Wiedziałem o ósemkowej reprezentacji, gdy nie cytowałem, ale założyłem to samo dla cytowanych, co ciekawe! –
To prawda! 'var_dump (011 == 9);' 'var_dump (011 === 9);' – Progrock