내가 쓰는 가정 0.5
으로 0.-5
예상치 못한 방법으로,하지만 여전히 실행할 수 있습니다. 계속 실행되고 -5로 평가되기 위해 0.
in 0.-5
은 무엇을 합니까?
나는 또한 시도 alert(0.-5+1)
인쇄 -4, 자바 스크립트를 무시 않는 0.
에서 0.-5
?
내가 쓰는 가정 0.5
으로 0.-5
예상치 못한 방법으로,하지만 여전히 실행할 수 있습니다. 계속 실행되고 -5로 평가되기 위해 0.
in 0.-5
은 무엇을 합니까?
나는 또한 시도 alert(0.-5+1)
인쇄 -4, 자바 스크립트를 무시 않는 0.
에서 0.-5
?
0.-5
"예기치 않은 방법" 이라고 생각하게 만드는 이유는 무엇입니까 ?
0.-5
구문 오류가 있고 후행 마침표가있는 부동 소수점 리터럴을 허용하지 않지만 사람들 .0
이 끝에 작성하도록 강요 합니다.
.
것을 허용 하면 123.toString(16)
(일반적인 트릭 123..toString(16)
은 실제로 사용 하는 것입니다. (123.).toString(16)
)
답변:
0.-5
성공적으로 파싱 할 수있다 0.
[1] , -
및 5
. 다음은 AST 탐색기에서 생성 된 표현식의 추상 구문 트리입니다.
이것은 (예기치 않은 방식으로) 유효한 JavaScript이며 -5
.
[1] 숫자 리터럴의 문법에 따르면 십진수와 지수 부분은 선택 사항입니다.
NumericLiteral ::
DecimalLiteral
[...]DecimalLiteral ::
DecimalIntegerLiteral. DecimalDigits opt ExponentPart opt
JS에서는 선택적 소수점으로 숫자를 표현할 수 있습니다.
x = 5.; //5
x = 5. + 6. //11
그리고 Tvde1의 의견에 따라 모든 Number 메서드도 적용 할 수 있습니다.
5..toString()
이 구문을 사용하면 괄호없이 숫자 함수를 실행할 수 있습니다.
5.toString() //error
(5).toString() //good
5..toString() //good
5 .toString() // awesome
이유를 알아 보려면 이 질문을 참조하십시오 .
5..toString()
.
1.0
도 부동 소수점이지만 1.
정수입니다.
float
에는 메서드 5.
가 있으며 float
.
(1).toMethod()
(1.)
console.log(0. - 5) // -5
console.log(0 - 5) // -5
console.log('0.' - 5) // -5
console.log('0' - 5) // -5
console.log(0.-5 === -5) // true
'0.' 또는 '0'은 유형이 숫자에 대해 고유하기 때문에 JavaScript에서 동일합니다. 빼기 연산자는 숫자 사이에 있으므로 항상 전달하는 것을 숫자로 변환하십시오. Python에서는 여러 유형이 있기 때문에 첫 번째는 Float이고 두 번째는 Integer입니다.
0.
입니다0.0
. 아니면 그냥0
.