모던 자바스크립트 입문을 정리한 내용입니다.
7 / 2 // -> 3.5
15 % 4 // -> 3
5 % 1.5 // -> 0.5
1 + "2month" // -> "12month" : 숫자 1을 문자열 "1"로 바꾸고 연결
0/0 // -> NaN
"one" * 1 // -> NaN
true + true // -> 2
1 + null // -> 1 : null을 0으로 바꾸어서 계산
1 + undefined // -> NaN
a / b // -> 0.7999999999999
라서 a / b == 0.8 // -> false
로 결괏값이 나온다는 점입니다.Math.abs(a / b - 0.8) < 1e-10
var a = [1, 2, 3];
var b = [1, 2, 3];
var c = a;
console.log(a == b); //-> false
console.log(a == c); //-> true
null == undefined //->true
1 == "1" //->true
"0xff" == 255 //->true
true == 1 //->true
true == "1" //->true
(new String("a")) == "a"//->true
(new Number(2)) == 2 //->true
[2] == 2 //->true
NaN === NaN //->false
null === undefined //-> false
1 === "1" //-> false
"0xff" === 255 //-> false
true === 1 //-> false
true === "1" //-> false
(new String("a")) === "a" //-> false
(new Number(2)) === 2 //-> false
[2] === 2 //-> false
피연산자 | 평가되는 값 |
---|---|
0, -0, 빈 문자열(""), NaN, null, undefined | false |
0을 제외한 숫자, 빈 문자열을 제외한 문자열, 모든 객체, 심벌 | true |
논리곱 연산자와 논리합 연산자는 단락 평가를 합니다. 단락 평가란 첫 번재 피연산자의 값이 표현식을 결정하면 두 번째 피연산자를 평가하지 않는 것을 말합니다.
a && b
란 논리식이 있습니다. a를 평가한 값이 false이면 b의 값이 관계없이 표현식 전체 값이 false가 됩니다.
이와 같이 a || b
도 a를 평가한 값이 true라면 b의 값이 관계없이 표현식 전체 값이 true가 됩니다.
var p = null;
p && p.name // -> null: p가 false로 평가되므로 p를 반환함
p = { name : "Tom", age : 18 };
p && p.name // -> "Tom" : p가 true로 평가되므로 p.name을 반환함
var time = time_interval || animationSettings.time || 33;
function f(x) {
x = x || 100;
...
}
10 + "cookies" // -> "10cookies"
100 + "" // -> "100"
("0000" + 12).slice(-4) // -> "0012
var n = 26;
n.toString() // -> "26"
n.toString(2) // -> "11010" : 2진수 문자열로 변환
n.toString(16) // -> "1a" : 16진수 문자열로 변환
(26).toSTring(16) // -> "1a" : 숫자에서 바로 메서드를 사용하고자 할 때는 소괄호로 묶는다
var x = 1234.567;
x.toString() // -> "1234.567"
x.toString(16) // -> "4d2.9126e978d5"
x.toFixed(0) // -> "1235"
x.toFixed(2) // -> "1234.57"
x.toFixed(4) // -> "1234.5670"
x.toExponential(3) // -> "1.235e+3"
x.toPrecision(3) // -> "1.23e+3"
x.toPrecision(6) // -> 1234.57
String(26) // -> "26"
String(1234.567) // -> "1234.567"
String(0x1a) // -> "26"
String("ABC") // -> "ABC"
String(true) // -> "true"
String(false) // -> "false"
String(NaN) // -> "NaN"
String({x:1, y:2}) // -> "[object Object]"
String([1, 2, 3]) // -> "1, 2, 3"
var s = "2";
s - 0 // -> 2
+s // -> 2
parseInt("3.14") // -> 3
parseFloat("3.14") // -> 3.14
parseInt("3.14 meters") // -> 3: 숫자 다음에 등장하는 문자열은 무시
parseFloat("3.14 meters") // -> 3.14 : 숫자 다음에 등장하는 문자열은 무시
parseInt("0xFF") // -> 255 : 문자열 앞부분에 "0x"가 있으므로 16진수로 해석
parseInt("0.5") // -> 0
parseInt(".5") // -> NaN : 문자열 앞부분에 "."이 있으므로 해석하지 않음
parseInt("abc") // -> NaN : 숫자로 해석할 수 없음
parseInt("\100") // -> NaN : 문자열 앞부분에 "\"가 있으므로 해석하지 않음
parseInt("101", 2) // -> 5 : 문자열을 2진수로 해석해서 변환
parseInt("ff", 16) // -> 255 : 문자열을 16진수로 해석해서 변환
Number("2.71828") //-> 2.71828
Number(123) // -> 123
Number(true) // -> 1
Number(NaN) // -> NaN
Number(undefined) // -> NaN
Number(null) // -> 0
Number({x:1, y:2}) // -> NaN
Nubmer([1, 2, 3]) // -> NaN
!!x
Boolean(x)