== : 비교할 수 있는 형태로 변환 시킨다 (타입이 다를경우 강제형변환)
ex) 254 == '254' //true
=== : 형변환을 하지 않고 연산한다.
ex) 254 === '254' //false
const type = (target,type)=>{
if(typeof type == "string"){
if(typeof target != type) throw `invalid ${target} : ${type}`;
}
else if(!(target instanceof type)) throw `invalid type ${target} : ${type}`;
return target;
};
type에서는 "number" , "boolean" , "string" 같은 예시를 넣어 첫번째 if문을 검사한다.(객체 아닌것들 체크) 그 후 다시 if문을 통해 체크를 진행한다.
else if 문에서는 문자열 형태의
type
이 아닌 것들 (Array,Set...)등을 체크하는 역할을 하는데 만약 처음if(typeof type == "string")
가 없다면if(typeof target != type)
에서 false한 애들이 전부else if
문을 시도하다 오류가 남으로 필요하다.
간단히
string type
(boolean,number,string)이라면 그에따라 체크 해주고
string type
이 아니라면(Array,Set..) 그에따라 체크해준다.
인자나 형태가 잘못된 것을 확인할 수 있다.
const test = (arr, _ = type(arr,Array))=>{
console.log(arr)
};
test([1,2,3]); //정상작동
test(123); //type함수에서 throw
공통점 : 객체를 밀봉하면 그 객체에는 새로운 속성을 추가할 수 없고, 현재 존재하는 모든 속성을 설정 불가능 상태로 만들어줍니다
Object.seal의 경우 쓰기 가능한 속성의 값은 밀봉 후에도 변경할 수 있습니다
ex)
let freeze = { val: 10}
let seal = { val : 10}
Object.freeze(freeze)
Object.seal(seal)
freeze.val = 1000 //값의 변경
seal.val = 1000 //값의 변경
console.log(freeze, seal) // {val: 10} {val: 1000}
실제 변경된 값은 Object.seal안에 있는 값만 변경가능하다.