JS-기본6

dev.dave·2023년 7월 29일

Javascript

목록 보기
151/167

여섯번째편

===============================

=====================

여섯번쨰시간 본편!!!!!!

========================

값의 변환에대한 문제들>>>>>>>>>>>>

0 < 1 참

'a' < 'b' 참

0 < 'a' 거짓 // 이건 'a' 이 문자열 a 를 숫자로바꾸면 NaN 이된다. NaN랑 비교를 하면 무조건 거짓이다.

[1] < [2] 참 //참조형이므로 기본형으로 변경한후 비교해야함, valueOf 로 해서 자기자신이 나오고 그다음 toString 으로 또 변경 그러면 문자열 '1' 이나옴 2도 이렇게 해서 서로 비교하면 참

[1,2] < [3,4] //배열이니까 valueOf 하고 toString 하면 '1','2' < '3','4' 가되는데 앞에수 끼리 비교를한다.즉, 1 이랑 3이랑비교하니까 참


일단

동등비교 ==(동등) 가뭐냐?

1.일치하면 동등
2.undefined == null
3.두 피연산자가 같은 객체를 참조 여부
4.참조형을 기본형으로 변경 (valueOf -> toString)
5.두 피연산자의 기본형 타입이 다르다면 숫자로 변환후 일치 여부 확인


그럼 부등호는 어떻게 동작하나?

, >= , < , <=

이 부등호들은 ==과 동일하지않다.

1.참조형 타입이라면 기본형으로 변경 (벨류오브랑 투스트링써서 바꾸면된다)
2.두 피연산자가 문자열이라면 문자열 비교 'a' < 'b' 는 알파벳순서가 뒤로갈수록 값이 큰값이 된다. 즉, a b c 있으면 셋중에 c가 가장큰값이다.
3.그렇지 않다면 숫자로 변경 후 비교


이중에 거짓은?

true > false
'true' > 'false'
true > 'false'

3번째가 거짓이다.

해석 :

true > false // 이건 둘다 문자가 아니다. 그러면 숫자로 변경된다 그럼 트루는 1 폴스는 0 이므로 참이다

'true' > 'false' // 이건 문자비교이다 , 즉 앞자리 알파벳 비교이다 t 랑 f 랑 비교했을때 t가 f보다 더 뒤에있으니 t가 더크다 즉, 참

true > 'false' // 일단 둘다 문자열이 아니다. 그럼 숫자로변경된다, 트루는 1 폴스문자인데 숫자로변경시 NaN 이다 NaN랑 비교하면 무조건 거짓임!!


흥미로운 이야기

수학에서는
x <= y 이면 x < y 이거나 x = y 이여야한다.

그러나

자바스크립트에서는
x <= y 는 x < y 와 x = y 는 거짓 일수있다.

예를들어
x = 0 , y = null
이거면
즉,

0 <= null 이면 둘다 일단 문자열이 아니다 그럼 숫자로 변경시킨다.
그럼 null 은 0 이된다
0 <= 0 이 되니까 참이 된다.

그러면

0 < 0 은 거짓이된다

그리고

0 == 0 이렇게 동등비교하면 0이랑 null 이랑 같지 않으므로 거짓이된다.


더하기 연산자 >>>>>>>

1.참조형은 기본형으로 변형을 합니다. 즉, [] 이거를 valueOf 나 toSting으로 변형한다는 말이다.

2.피 연산자 둘중 하나가 문자열이라하면 한쪽을 문자열로 변경을 시킨다 그래서 문자열 더하기로 진행시킨다.

3.즉, 문자 더하기 진행 하는거고,

4.그렇지 않다면 즉,둘다 문자열이 아니다라면,
두 값을 숫자로 변경하여 더하기를 진행한다.


문제 >

[] + []

[] + {}

{} + {}

{} + {}


풀이

[] + [] // 빈 배열에 toSting 은 자기자신이 나오고 그다음 valueOf 하면 문자열이니까 ,즉 빈배열이니까 빈문자열이 나온다 ''

// {} 이 빈객체를 숫자로 바꾸려면
일단 기본형으로 바꾸면 [object object] 임
그리고
숫자로 바꾸면
NaN 이 됨

// [] 이 대괄호는 기본형으로 바꾸면 '' 빈문자열이 됨 그럼 이것을
숫자로 바꾸면 0 이됨

[] + {} // '' + '[ object object] = [object]

{} + {} // NaN

{} + {} // 0


*정리

-동등비교 :
== 일치하면 동등함 ,
null 은 == undefined ,
그리고

하나가 기본형이고, 하나가 참조형이면
참조형을 기본형으로 바꾼다.
(기본형으로 바꿀때는 valueOf를 먼저하고 그담에 toString 을 한다)

그리고

서로다른타입이면 숫자로 변경해서 비교한다.

그다음

부등호(> < 이거)에대해서는

참조형을 기본형으로 바꾼다.
(기본형으로 바꿀때는 valueOf를 먼저하고 그담에 toString 을 한다)

그리고

두 피연산자가 문자라면, 문자열로 비교하고,

두 연산자중 하나라도 문자가 아니라면 피연산자를 숫자로 변경하여 비교한다.

그리고
마지막으로
더하기 +는

더하기도
참조형을 기본형으로 바꾼다.
그리고

피연산자 둘중 하나가 문자열이라면 ,다른하나도 문자열로 변경후 문자 더하기를 실행한다.

만약
그렇지 않다면
둘중하나를 숫자로 변경하고, 더하기를 합니다.

==============

일단 지난편 복습

== 잂치하면 참이다.

undefined == null 은 참이다.

둘다 참조형이면 같은 객체를 참조하고 있어야한다.

그리고
만약

둘다 참조형이아니라면,

우선

타입이 같은 객체라면 값이 일치해야한다.

만약
타입이 다르다면, 서로다른 타입을 숫자로 변환하고 일치비교를 한다.

-부등호는
부등호는 그럼 타입이 다를경우 어떻게 값을 변경하는가?
: 참조 타입인 경우에는 우선 기본형으로 변경을 한다.
(valueOf한다음에 toString 진행~)
그래서 기본형으로 변경했는데,
기본형으로변경한 값들이 둘다 문자열이라면
문자비교를 한다.
(문자비교는 abcd순서대로 값이 뒤로갈수록 더커진다.)
그리고
문자열이 아니라면 숫자로 변경해서 비교를 한다.

그리고

마지막으로
더하기 비교에대해서는
우선 참고형이라면 기본형으로 변경을 한다.
그리고
둘중에 문자열이 존재하고,
문자열이 아닌거가 존재하면, 그걸 문자열로 바꾼다음
둘을 비교한다.(문자열끼리)

그렇지 않다면 숫자로 변경하고, 숫자 더하기를 진행한다.

=====================

profile
🔥개인 메모 / 다른블로그 자료 참조 / 다른블로그 자료 퍼옴 (출처표기) /여기저기서 공부 했던 내용 개인메모 & 참고 / 개인 기록 용도 블로그 입니다.🔥

0개의 댓글