[자바스크립트 완벽 가이드] 2.

김정환·2021년 1월 31일
0

자바스크립트 완벽 가이트 6판은 ECAMScript5와 HTML5를 기준으로 다루고 있음.

타입 변환

StringNumberBooleanObject
undefined"undefined"NaNfalseTypeError
null"null"0falseTypeError
true"true"1new Boolean(true)
false"false"0new Boolean(false)
""0falsenew String("")
"1"1truenew String("1")
"a"NaNtruenew String("a")
0"0"falsenew Number(0)
NaN"NaN"falsenew Number(NaN)
Infinity"Infinity"truenew Number(Infinity)
1"1"truenew Number(1)
[]""0true
[1]"1"1true
['a']"a"NaNtrue
function(){}"function(){}"NaNtrue
  • toString()
  • valueOf()
  • parseInt()
  • ...

표현식

: 인터프리터가 값으로 평가하는 JavaScript 구문

기본 표현식

  • 1 "hello" /pattern/ ...

  • 예약어 : ture false null this

  • 변수 : i student undefined

초기화 표현식

  • 배열 : [] [1,2,3] [1,,2] [[1,2], [3,4]] ...

  • 객체 : {} { x:0, y:1 } { ax: { x:1, y:2 }, ay: { x:3, y:4 } } ...

프로퍼티 접근 표현식

  • a.x a[x] a[1] ...

함수 정의 표현식

  • var f = function(a) { return a; } ...

호출 표현식

  • f(0) Math.random() ...

객체 생성 표현식

  • new Object() new Object new Point(1,3) ...

산술 표현식

  • 덧셈 연산자
1 + 2		// => 3
1 + "2"		// => "12"
"1" + 2		// => "12"
"1" + "2"	// => "12"
1 + null	// => 1
1 + undefined	// => NaN
  • 단항 산술 연산자
    : + - ++ --

  • 비트 연산자
    : & | ^ ~ AND OR XOR NOT
    : << >>> Zero Fill - LeftShift RightShift
    : >> RightShift ( 가장 왼쪽 비트 보존, 가장 우측으로 )

관계형 표현식

동치와 부등치 연산자

  • == ~와 동등 (equal)

    • 두 값의 타입이 다르지만 값이 같으면 동치일 수 있음
	1 == '1'		// => true,  1 === Number("1") 로 비교함.
	1 == true		// => true
	'1' == true		// => true
	0 == -0			// => true
        
	null == null		// => true
	undefined == undefined	// => true
	null == undefined	// => true
  • === ~와 일치 (identical)

    • 두 값이 모두 null undefined true false일치

    • 두 값이 모두 같은 객체 배열 함수를 참조하면 일치

    • 두 값이 서로 다른 객체를 참조하면 프로퍼티가 같아도 불일치

    • 하나의 값이라도 NaN이면 불일치 ( n !== ntrue인 유일한 값)

    • 두 값의 타입이 다르면 불일치, 0-0일치

	1 === '1'		// => false
	1 === true		// => false
	'1' === true		// => false
	0 === -0		// => true
    
	null === null		// => true
	undefined === undefined	// => true
	null === undefined	// => false
  • 참고 ( == 대신에 === 를 사용하자 )
Array(3) == ",,"	// => true
[0] == [0]		// => false, new String("0") == new String("0")
[] == ![]		// => true

=== 쓰세요


비교연산자

  • < > <= >=

  • 숫자 or 문자열만 비교

  'a' > 1	// => false
  'a' < 1	// => false
  1 > 'a'	// => false
  1 < 'a'	// => false
  
  'a' > '1'	// => true
  'a' < '1'	// => false
  
  1 < 9		// => true
  '1' < 9	// => true
  1 < '9'	// => true
  • 피연산자 중 NaN => 무조건 false

  • InfinityInfinity 제외한 어떤 수보다 큼

  • -Infinity-Infinity 제외한 어떤 수보다 작음

  • 숫자 or 문자열이 아닌 피연산자는 먼저 변환

  • 문자열 비교 String.localCompare()

  • 대문자 변환 String.toUpperCase() 소문자 변환 String.toUpperCase()

in 연산자

  • 좌변 값이 객체 프로퍼티 이름에 해당할 경우 true
var obj = {a:1, b:2};
"a" in obj;		// => true
"z" in obj;		// => false
"valueOf" in obj	// => true, 상속된 프로퍼티 true

var arr = [1,2,3];
"0" in arr;		// => true, 0 번째 원소
1 in arr;		// => true
5 in arr; 		// => false

instanceof 연산자

var num = new Number();
num instanceof Number;	// => true
num instanceof Object;	// => true, 모든 객체는 Object의 인스턴스

var arr = [1,2,3];
arr instanceof Array;	// => true
arr instanceof Object;	// => true
arr instanceof Number;	// => false

var a = "a";
a instanceof Object;	// => false, 객체가 아니면 false

프로토타입 체인

논리 표현식

  • AND &&
  • OR ||
  • NOT ! : 피연산자 값을 반전하기 전에 불리언 값으로 변환

할당 표현식

  • a = b a.x = b
  • a += b a =- b a *= b a /= b a %= b
  • a <<= b a >>= b a >>>= b
  • a &= b a |= b a ^ b

0개의 댓글