자료구조와 알고리즘 1

김명성·2022년 2월 18일
0

자바스크립트

목록 보기
26/26

자바스크립트로하는 자료구조와 알고리즘 - 배세민


1.scope

  • var로 선언한 변수의 scope : 함수 단위
  • let,const로 선언한 변수의 scope : 블록 단위

  1. boolean 확인.
일반적으로 false로 평가되는 경우
false0 빈 문자열('')("")NaNundefinednull


일반적으로 true로 평가되는 경우
true0이 아닌 다른 숫자 비어있지 않은 문자열비어 있지 않은 객체

=== 와 ==의 차이

==는 값만을 확인하는 반면, ===는 형과 값을 모두 확인한다.

  "5" == 5 // true
  "5" === 5 // false

첫째 줄이 true인 이유는, ==연산자가 실행될 때 "5"가 숫자로 강제 형변환이 되기 때문이다.


객체 비교
const obj1 = {};
const obj2 = {};

obj1 == obj2 // false
obj1 === obj2 // false

꼭 빈 객체가 아니고, 두 객체가 같은 속성과 값을 가지고 있더라도 false를 반환한다. 두 변수의 메모리상 주소는 다르기 때문이다. (참조형 자료)


이런점 때문에, lodash나 underscore와 같은 유틸리티 라이브러리를 사용한다. 이 두 라이브러리에는 isEqual함수가 있는데, 두 객체, 혹은 두 값을 정확하게 확인하게 해준다.

이것이 가능한 이유는 라이브러리의 isEqual함수가 속성 기반 등가 비교 방식으로 구현됐기 때문이다. 속성 기반 등가 비교 방식은 객체의 각 속성을 비교한다.


속성 기반 등가 비교 방식
function isEquivalent(a,b){

let aProps = Object.getOwnPropertyNames(a);
let bProps = Object.getOwnPropertyNames(b);

if(aProps.length != bProps.length) {
	return false;
}

for(let i = 0; i < aProps.length; i++){
	let propName = aProps[i];
	
    if(a[propName] !== b[propName]){
		return false;
			}
		}
	return true;
}
isEquivalent({'hi':12},{'hi':12}); //output : true

const obj1 = {'prop1': 'test', 'prop2': function (){} };
const obj2 = {'prop1': 'test', 'prop2': function (){} }; 

isEquivalent(obj1,obj2) //output : false

책을 읽고 알게 된 점

  1. Object.getOwnPropertyNames() method.
    Object.getOwnPropertyNames() 메서드는 전달된 객체의 모든 속성들을 [배열]로 반환한다.
  2. 키 값은 '문자열'이다.
  3. 객체 프로퍼티에 접근할 때는 [ ] 를 이용할 수 있다. [ ] 안에는 문자열이 들어가야 한다.
    이때 문자열을 값으로 가진 변수를 넣을 수 있다.
    (let propname = aProps[i])
    (aProps[i]와 bProps[i]가 같다는 점을 활용하여 키의 속성을 추출할 수 있다.)

0개의 댓글