JavaScript 형식 & 값 & 변수

플러스 0 VS 마이너스 0
두 값 은 거의 똑 같 습 니 다. 나 누 기 를 제외 하고:
var zero = 0;       //   
var negz = -0;      //   
zero === negz;      // true
1/zero === 1/negz;  // false

《 자 바스 크 립 트 권위 지침 서 》 p. 37
undefined VS null
undefined 는 변수 가 할당 되 지 않 기 전의 기본 값 으로 정의 되 지 않 았 음 을 표시 합 니 다.type: of undefined = undefined. null 은 빈 대상 참조 로 대상 이 비어 있 음 을 표시 합 니 다.type: of null = object.
문자열 길이
string. length () 는 문자 의 개수 가 아 닌 16 비트 값 을 가 진 개 수 를 되 돌려 줍 니 다.
var p = "π";    // 16   ,0x03c0
var e = "e";    // 17   ,0x1d452
p.length;       // 1
e.length;       // 2

《 자 바스 크 립 트 권위 지침 서 》 p. 38
포장 대상
자 바스 크 립 트 의 데이터 형식 은 원본 형식 과 대상 유형 으로 나 뉜 다.Number, String, Boolean, Null, Undefined 는 원본 형식 입 니 다.
var s = "hello world!";         // s     String
var word = s.substring(2, 5);   //   string   ,word        Stirng(   typeof    )

문자열 이 대상 이 아 닌 이상 왜 속성 이 있 습 니까?문자열 s 의 속성 을 참조 하면 자 바스 크 립 트 는 new String (s) 방식 으로 대상 으로 변환 되 며, 속성 참조 가 끝나 면 이 새 대상 은 삭 제 됩 니 다.
var s = "test";     //         String
s.len = 4;          //          ,            ,   s     
var t = s.len;      // t undefined,          
var u = s.length;   // u=4,      string  length  
var s = "test";         // typeof(s) = string
var n = 1;              // typeof(n) = number
var b = true;           // typeof(b) = boolean
var S = new String(s);  // typeof(S) = Object
var N = new Number(n);  // typeof(N) = Object
var B = Boolean(b);     // typeof(B) = Object

가 변 적 이지 않 은 원시 값 & 가 변 적 대상 참조
원본 값:
var s = "hello";    //         string
s.toUpperCase();    //       "HELLO",        s
s                   //    hello

대상 참조:
var o = { x:1 };    //         
o.x   = 2;          //         
o.y   = 3;          //       

var a = [1,2,3];    //         
a[0]  = 0;          //       
a[3]  = 4;          //         
var o = { x:1 }, p = { x: 1 };      //   2          
o === p;                            // false,          

var a = [];                         //          
var b = a;                          // b a       
b[0]  = 1;                          //       
a[0];                               // 1
a === b;                            // true,        

p. 46
명시 적 형식 변환
'+' 연산 자의 한 조작 수가 문자열 이 라면 다른 조작 수 를 문자열 로 변환 합 니 다.일원 '+' 연산 자 (또는 '연산 자) 는 그 조작 수 를 숫자 로 변환 합 니 다. 일원'!연산 자 는 그 조작 수 를 불 값 으로 바 꾸 고 반대 한다.
x + "";     //    Stirng(x)
+x;         //    Number(x),     [x - 0]
!!x;        //    Boolean(x),      

p. 50
대상 을 원시 값 으로 변환
대상 을 문자열 로 변환
대상 을 문자열 로 변환 하 는 과정 은 다음 과 같 습 니 다.
  • 먼저 toString () 을 호출 하고 원본 값 을 되 돌려 주면 이 원본 값 을 문자열 로 변환 하고 되 돌려 줍 니 다.
  • 대상 이 toString () 방법 이 없 거나 방법 이 원래 값 이 아 닌 경우.value Of () 를 호출 합 니 다. 원본 값 을 되 돌려 주면 이 원본 값 을 문자열 로 변환 하고 되 돌려 줍 니 다.
  • 상기 두 가지 방법 모두 원시 값 을 얻 지 못 하면 유형 오류 이상 을 던 집 니 다.

  • 대상 을 숫자 로 변환
    대상 을 숫자 로 변환 하 는 과정 은 다음 과 같다.
  • 우선 valueOf () 를 호출 하고 원시 값 을 되 돌려 주면 이 원시 값 을 숫자 로 변환 하고 되 돌려 줍 니 다.
  • 대상 이 value Of () 방법 이 없 거나 방법 이 원시 값 이 아 닌 경우.toString () 을 호출 합 니 다. 원본 값 을 되 돌려 주면 이 원본 값 을 숫자 로 변환 하고 되 돌려 줍 니 다.
  • 상기 두 가지 방법 모두 원시 값 을 얻 지 못 하면 유형 오류 이상 을 던 집 니 다.

  • 대상 을 불 로 변환
    대상 을 불 형식 으로 변환:
  • 모든 대상 이 'true' 로 전환 된다.

  • 모든 날짜 가 아 닌 대상 에 게 대상 이 원래 값 으로 전환 하 는 것 은 기본적으로 대상 이 숫자 로 전환 하 는 것 (먼저 value Of () 을 호출 하 는 것) 이 고 날짜 대상 은 문자열 을 변환 하 는 모드 를 사용 합 니 다.
    var bool = new Boolean(false);
    alert(typeof(bool + 1));        //          ,number
    alert(typeof(bool - 1));        // number
    alert(bool.toString());         // "false"
    alert((1+bool).toString());     // 1
    
    
    var now = new Date();
    alert(typeof(now + 1));         //           ,string
    alert(typeof(now - 1));         // number
    alert(now.toString());          // "Sun May 08 2016 08:57:47 GMT+0800"
    alert((now + 1).toString());    // "Sun May 08 2016 08:57:47 GMT+08001"

    《 자 바스 크 립 트 권위 지침 서 》 p. 52
    변수 선언
    함수 역할 영역 (functionscope)
    C 언어 에서 괄호 안의 모든 코드 는 각자 의 역할 영역 을 가지 고 있 습 니 다. 우 리 는 블록 급 역할 영역 (block scope) 이 라 고 부 릅 니 다.한편, JavaScript 에서 함수 역할 영역 을 사 용 했 습 니 다. 함수 성명 에서 설명 한 모든 변 수 는 함수 내 에서 항상 볼 수 있 습 니 다.
    function test(o) {
        var i = 0;                      // i           
        if(typeof o == "object") {
            var j = 0;                  // j           
            for(var k=0; k < 10; k++) { // k           
                console.log(k);
            }
    
            console.log(k);             //   10
        }
    
        console.log(j);                 // j     ,         
    }

    국부 변수 와 전역 변수 가 이름 을 바 꾸 면 전역 변 수 는 국부 변수 로 덮어 씁 니 다.
    var scope = "global";
    function f() {
        console.log(scope);     //   "undefined",   "global" 
        var scope = "local";    //        
        console.log(scope);     //   "local"
    }

    자 바스 크 립 트 에 블록 급 작용 역 이 없 기 때문에 변수 성명 을 함수 맨 위 에 놓 을 수 있 습 니 다. 그러면 소스 코드 는 실제 변수 작용 역 을 뚜렷하게 반영 할 수 있 습 니 다.
    전역 변수
    전역 변 수 를 설명 할 때 실제 적 으로 전역 대상 (this) 의 속성 을 정의 합 니 다.var 를 사용 하여 전역 변 수 를 설명 할 때 이 변 수 는 설정 할 수 없 으 며 delete 연산 자 를 통 해 삭제 할 수 없습니다.var 로 설명 하지 않 으 면 이 전역 변 수 는 설정 할 수 있 습 니 다.
    var truevar   = 1;  //              
    fakevar       = 2;  //             
    this.fakevar2 = 3;  //   
    
    delete truevar;     // false,        
    delete fakevar;     // true,     
    delete fakevar2;    // true,     

    역할 영역 체인 (scope chain)
  • 역할 도 메 인 체인 은 함수 대상 목록 이나 링크 입 니 다. 이 대상 은 이 코드 '역할 도 메 인 에서' 의 변 수 를 정의 합 니 다 (패키지 닫 기).목록 에서 대상 의 순 서 는 부분 대상, 전역 대상 (후 변수 해석 의 실현) 입 니 다.
  • 자 바스 크 립 트 가 변수 x 를 찾 아야 할 때 (이 과정 을 '변수 해석' variable resolution 이 라 고 함) 체인 의 첫 번 째 대상 부터 찾 습 니 다. 이 대상 에 x 라 는 속성 이 있 으 면 이 속성의 값 을 직접 사용 합 니 다. 존재 하지 않 으 면 체인 의 다음 대상 을 계속 찾 습 니 다.
  • 함 수 를 정의 할 때 실제 적 으로 하나의 역할 도 메 인 체인 을 저장 합 니 다.이 함 수 를 호출 할 때, 이 함 수 는 국부 변 수 를 저장 하기 위해 새로운 대상 을 만 들 고, 이 대상 을 저 장 된 역할 체인 에 추가 하 며, 동시에 함수 호출 역할 영역 을 표시 하 는 더 긴 '체인' 을 만 듭 니 다.

  • 《 자 바스 크 립 트 권위 지침 서 》 p. 56

    좋은 웹페이지 즐겨찾기