Strong Root

== 는 비교 전에 항상 matching type 으로 형변환을 시킨다.


=== 는 값 뿐만아니라 타입까지 강제적으로 비교한다.




1
2
3
4
5
6
7
0 == "";        // true
1 == "1";       // true
1 == true;      // true
 
0 === "";       // false
1 === "1";      // false
1 === true;     // false
cs






출처 : http://www.w3schools.com/js/js_best_practices.asp

typeof 는 Array, Date, Object 모두 "object" 를 리턴하여 구분이 불가능하므로, constructor 를 이용하여 해결한다.




1
2
3
function isArray(myArray) {
    return myArray.constructor.toString().indexOf("Array"> -1;
}
cs




1
2
3
function isDate(myDate) {
    return myDate.constructor.toString().indexOf("Date"> -1;
}
cs






출처 : http://www.w3schools.com/js/js_type_conversion.asp

1
2
3
4
5
6
age = Number(age);
if (isNaN(age)) {
    voteable = "Error in input";
else {
    voteable = (age < 18) ? "Too young" : "Old enough";
}
cs






출처 : http://www.w3schools.com/js/js_comparisons.asp

"" (empty string) 의 Boolean 값은 false 다.

1
2
var x = "";
Boolean(x);       // returns false
cs




undefined 의 Boolean 값은 false 다.

1
2
var x;
Boolean(x);       // returns false
cs




null 의 Boolean 값은 false 다.

1
2
var x = null;
Boolean(x);       // returns false
cs






그렇다면 String값의 이상유무를 확인할 때, 아래와 같이 써주면 끝?

1
2
3
4
5
6
if (x) {
    // valid
}
else {
    // invalid
}
cs




틀렸다면 이유를 알려주시면 감사합니다.






출처 : http://www.w3schools.com/js/js_booleans.asp + 내추측

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ThreadGroup rootGroup = Thread.currentThread().getThreadGroup();
ThreadGroup parentGroup;
while ((parentGroup = rootGroup.getParent()) != null) {
    rootGroup = parentGroup;
}
 
Thread[] threads = new Thread[rootGroup.activeCount()];
while (rootGroup.enumerate(threads, true== threads.length) {
    threads = new Thread[threads.length * 2];
}
 
for (Thread t : threads) {
    if (t.getId() == targetID) {
        /* found it */
    }
}
cs






출처 :

http://stackoverflow.com/a/1323480

http://stackoverflow.com/a/6668121

1
2
3
4
5
var myNumber = 128;
 
myNumber.toString(16);    // returns 80
myNumber.toString(8);    // returns 200
myNumber.toString(2);    // returns 10000000
cs






출처 : http://www.w3schools.com/js/js_numbers.asp

소수 연산(Floating point arithmetic)은 때때로 정확하지 않다.


1
2
3
var x = 0.2 + 0.1;
 
alert(x);    // alert 0.30000000000000004
cs






위 문제를 해결하기 위해 정수형 연산으로 바꿔 계산한다.


1
2
3
var x = (0.2 * 10 + 0.1 * 10/ 10;
 
alert(x);    // alert 0.3
cs






출처 : http://www.w3schools.com/js/js_numbers.asp

1
2
3
4
5
{
    var age = 20;
}
 
alert(age);    // alert 20
cs


코드 블럭을 무시하고 변수가 인식된다.


결론 :

JavaScript는 블럭 스코프를 지원하지 않는다.

(JavaScript does NOT support Block Scope.)






출처 : My brain and fingers