11.29.월요일 Js

document 문서 / window 전역
1.
console.dir(window)
console.dir(document)

window / document 통제하는데 필요한 것을 정의한 것
(그래서 코뿔소책 js가 필요한 것이다. )

  1. window.console.log

접근??

console.error('hello')
로그로 바로 뽑을 수 있음
노드나 js 사용중에 error 나는 코드를 사용해서 나타날때 ,
console.error('hello')

console table
let tableSample ={ "name": "laa" , "age": 10 }

4개

console.dir(documeent)
donsole.log
console.error('error')
let tableSample ={"name": "laa" ]

변수 : 메모리 주소의 식별자

변수명과 값이 있으면, 변수명이 값을 가리킨다.
x=10 y=10
x 변수, y 변수가 10을 가리킨다.

<파이썬> 같은 값이어도ㅗ 다른 공간 가리킨다.
낮은 숫자들이 같은 공간에 담겨있는 이유는? - 메모리 효율을 위해서 !
특정 수만 저장해서 메모리 효율화시킨다. ~256 까지만 같다.
비트를 담는 하드디스크 용량
8비트 = 1바이트
1024 바이트 = 1KB
1024 KB = 1 MB
1024 MB = 1 GB
1024 GB = 1 TB

KB,MB,GB,TB,PB,(갈매기털빼)
하드디스크 = 보조기억장치
cpu = 두뇌
쿼드 코어 = 4개 cpu
옥타 =8
헥사 =16
cpu의 각 처리속도가 중요
붕어머리 4개 < 사람 머리
사실은 i5 i7 i9이 세대마다 있어, 처리속도가 중요하다.

cpu 벤치마크 확인해보기.
상이ㅜ권cpu

메모리같은 경우 16gb이상 살 필요는 별로없다.

cpu ram ssdi
cpu에서 연산하기 위해서 ram에서 정보 갖고온다.
진수 실무에서 사용할 이유 x - 코테에 나오기 때문에 알아야함!

진수 표현

ob100 2진수 (2) 100 ( 2^21 + 2^1 0 + 2^00
0o100 8진수
ox100 16진수 (16)
문제에서 10진수가 어떻게 표현이 되는지 .
10진수 10^2
2 + 10^12 +10^05 =225
16진수 100 = 16^21 + 16^10 + 16^0 *1

변수

  • var & let 차이점
    let 은 재선언 안되고, 재할당만 가능 ( var과 차별점을 두려고 )
  • const 재선언 x
    선언은 변수를 처음 let const var를 사용해서 선언하는거고 할당은 그 안에 다시 변수들을 넣는거에요

typeof [] //object (여기서부터, js가 어려워짐 )
typeof functio===

소수점 표기 다르면 오류 생기는 이유? 보통은 tofixcel 로 고쳐서 쓸때
0.1*0.1 = 다른 값나옴
자바스크립트 - 일이 수습할 수덦을 정도니까 못고치고 넘어감

어떤 것의 비교, true/ false 조심해서 쓸것 .

실제 서비스에서 조단위 필요? -국가 예산 - 허점을 파고드는 사람 존재
책 등록할때, 가격선정
음수를 허락하지 않으면 0-1 : 9999999(전체 금액)
해킹당할 수 있음 -보안 중요

parseInt(string, radix) : string을 정수로 변환한 값 리턴

string의 첫 글자를 정수로 변경안되면 Not a number를 반환한다.

(0.1*3).toFixed(3) : 소수점 3

parseInt(10,10) 10진수

Math.random() 랜덤 수

연산

산술 -
주석처리 //
따라서 나눗셈 // 안됨.

산술연산, 할당연산, 논리연산
실무에서 사용하는 연산


할당연산

  • a 에 어떤 값 누적하고 싶다.
    a =11 b= 3
    a= a+b 13
    등호 우선순위? 연산자 우선순위가 있다 . = "
    -연산자 우선순위 사용보다 꽐호 치는게 배려!!
    우선순위

a =String(a) : 문자열 형변환
== 형변환 해줌
===형변환 안함 (==보다 속도빠르다)
=> 등호 개수에 따른 시간차는 적다.
반복문에서 속도 격차가 다르다.

// 논리연산
// and, or, not
// &&(and) = 논리곱
// ||(or) = 논리합
// !(not) = 부정
// true = 1
// false = 0

#문제

#실습

# why? >> let y =10 문제

flase && false = false 나온다고 생각했는데 왜 Uncaught TypeError나왔을까?
선언을 같이 하니까 에러가 떴고, y선언 먼저 하니까 제대로 나옴.

# answer >> ; 로 문장 마침표 써줘야지 인식한다. 기초를 놓치지 말자.

true || console.log('hello')
true
false || console.log(;hello')
hello

앞에가 참이면 뒤에 보지 않아서 hello 출력하지 않는다.

#드모르간 법칙- 안에 있는 요소 삭제해도 되는지 판단

( 시니어레벨에서 최적화 )
(x+y)' = !x*!y
ex)

!(x||y) : false
(!x && !y) : false

# 조건연산자 (3항 연산자)

let age=10;
let accessallowed =(age>18)? true:false;
accessallowed
false

let age=10;
undefined
let accessallowed =(age>18)? true:false;
undefined
accessallowed
false

대체 용법
(false && '완료') || '미완료'
false니까 뒤에 볼필요 x 미완료보러감.

'''templeterary 백틱

  • 문자열은 true로 인식 ' ' 백스페이스도 문자열로 true typeof(' ')

NaN === NaN // false
Number.isNaN(NaN) // true, Number.isNaN을 사용하세요!
isNaN(undefined) // true, isNaN은 논란의 여지가 많음
isNaN(null) // false, 이건 또 false?
isNaN(-NaN) // true
isNaN({}) // true
Object.is(NaN, NaN) // true

형변환

typeof (대상) 또는 type of 대상 로 확인 가능
Number(true) =1
String(5) ='5' 이것보다 123+'' 로 '123'자주 쓴다.
typeof('1'+1) = str '11'
typeof(1+'1') = str '11'
런타임에 따라 실행되는게 다름 (v8에선 str/ 앞에것을 따르는 것도 있음 -다른 언어에선 오류
-실무에서 자주 사용

123 + ''
'123'
!!true
true
!!'hojun'
true
!!''
false
!!1
true
!!0
false
!!undefined
false
!!NaN
false

------ 대혼란 ------ 그래서 우리는 !!Nan을 사용한다.

'0' == 0
true
0 == ''
true
0 == '0'
true
false == 'false'
false
false == '0'
true
false == null
false
false == undefined
false
false == NaN
false
!!null
false
!!undefined
false
!!NaN
false

!!true = true
!!undefined = false
!!NaN = false

  • 회사에서 자주 사용하는 형변환은 회사 컨벤션 따라가야 합니다.

-숫자로 형변환

let x='10000'
+x => 10000
let x='10000'
-x => -10000

y=1230123asdf
parseInt(y,10) #안전하게 바꾸려면 parseInt사용할것!
1230123. (숫자까지만)
+y 로만 하면 NaN 값 출력됨!

문자그대로 출력-이스케이프문자

\t
\n
\\
\'
\"
ex) "mom : i\'m \'so\' happy"

if 문 중첩되는 경우 switch가 더 효과적
나머지
-js [-1] 허락하지 않는다.
-2n 은 BigInt(2)

코딩 문제: 8의 개수 세기

let text = '';
let count = 0;
for (let i = 0; i < 10001; i++) {
text += i;
}
// console.log(text);
for (let i = 0; i < text.length; i++) {
if (text[i] == '8'){
count += 1;
}
}
console.log(count);

최대값 구하기 ( 최소값 구하기는 temp 부등호 방향만 바뀌면 됨 )

let sample = [10, 20, 30, 5, 6, 3, 100, 110, 99, 88];
let temp = sample[0];
for (let i = 0; i < sample.length; i++) {
if (temp < sample[i]){
temp = sample[i];
}
}

#가장 작은 차 구하기.

let value = [1, 4, 6, 8, 13, 17, 20, 21, 28];
let temp = value[1] - value[0]
let result = 0
for (let i = 0; i < value.length - 1; i++) {
if (temp > (value[i+1] - value[i])){
result = value[i+1] - value[i];
}
}
console.log(result);

# 값에서 가장 차 나오는 연속값 2개 구하기

let value = [1, 4, 6, 8, 13, 17, 20, 21, 28];
let temp = value[1] - value[0];
let result = 0;
for (let i = 0; i < value.length - 1; i++) {
    if (temp > (value[i+1] - value[i])){
        temp = value[i+1] - value[i];
        result = i;
    }
}
console.log(value[result], value[result+1]);

# 순환과정

// 정답코드
let value = [1, 4, 6, 8, 13, 17, 20, 21, 28];
let temp = value[1] - value[0]; // 4 - 1 -> 3, 초기 temp는 3
let result = 0;
for (let i = 0; i < value.length - 1; i++) {
if (temp > (value[i+1] - value[i])){
temp = value[i+1] - value[i];
result = i;
}
}
console.log(value[result], value[result+1]);
////////////////////////
// 1번째 순회(i==0, temp=3, result=0)
for (let i = 0; i < 8; i++) {
if (3 > 3){
temp = value[i+1] - value[i];
result = i;
}
}
// 2번째 순회(i==1, temp=2, result=1)
for (let i = 0; i < 8; i++) {
if (3 > 2){
temp = 2;
result = 1;
}
}
// 3번째 순회(i==2, temp=2, result=1)
for (let i = 0; i < 8; i++) {
if (2 > 2){
temp = value[i+1] - value[i];
result = i;
}
}
...

좋은 웹페이지 즐겨찾기