js 의 변수 와 유형

5847 단어 전단 기술 - js
js 의 변수 와 유형
1. javascript 은 몇 가지 언어 유형 을 규정 합 니 다.
7 가지 기본 데이터 형식 은 다음 과 같다.
1. String
2. Number
3. Boolean
4. Null
5. Undefine
6. NAN
7. Symbol

2. 인용 유형 은 다음 과 같 습 니 다.
1. Object
2. Function 

2. Symbol 유형 이 실제 개발 에서 의 응용, 간단 한 Symbol 을 수 동 으로 실현 할 수 있 습 니 다.
먼저 말 하면 symbol 무엇 을 하 는 것 입 니까?
`symbol`            。
     ,              ,     `new Symbol()`。
	const a = Symbol('amy'); //amy    symbol   ,     
	const b = Symbol('amy');
	const c = Symbol();
	const d = Symbol();
	c !== d // true
	a !== b // true

3. JavaScript 의 변수 가 메모리 에 있 는 구체 적 인 저장 형식
메모리
창고 메모리
대열
참조 형식 값
기본 데이터 형식 값
이벤트 시퀀스
json 과 유사 한 key, value 일치
옷 을 접다
줄 을 서다
무질서 저장, 인용 에 따라 가 져 오기
앞 선 사람 이 먼저 나 오고, 뒤 진 사람 이 먼저 나온다.
먼저 들 어가 면 먼저 나 오고, 나중에 들 어가 면 나중에 나온다.
저장 대상
실행 프로그램
-
코드 할당
시스템 자동 할당
-
메모리 크기 가 고정 되 지 않 아 동적 으로 조정 할 수 있 습 니 다.
메모리 크기 고정
-
공간 이 넓 고 운행 효율 이 상대 적 으로 낮다.
공간 이 작고 운행 효율 이 비교적 높다.
-
엄격 한 의미 에서 볼 때 변수 대상 도 메모리 에 저장 되 지만 변수 대상 의 특수 한 기능 으로 인해 우 리 는 이 해 를 할 때 이 를 메모리 에 구분 해 야 한다.
4. 기본 유형 에 대응 하 는 내 장 된 대상 과 그들 사이 의 컨테이너 해체 작업
기본 유형의 내 장 된 대상 은 다음 과 같 습 니 다.
	String(),
	Number(),
	Boolean(),
	symbol()

참조 형식의 내 장 된 대상 은 다음 과 같 습 니 다.
	RegExp(),
	Date(),
	Array(),
	Object(),
	Function(),
	Error()
: 변환 값 유형 = 대상 유형 : 변환 대상 유형 = 값 유형
5. 이해 값 유형 과 참조 유형
원형 체인 더미, 창고 저장 방식
6. null 과 undefined 의 차이
null == undefined //  true
null === undefined // false
!!null // false
!!undefined // false
Number(null) //0
Number(undefined) //NaN
null        ,           ,   “  ”。
undefined       ,          。
        null    ,        undefined    。
typeof null // object
typeof undefined // undefined

7. 자바 스 크 립 트 데이터 형식 을 판단 하 는 세 가지 방식 과 그들의 장단 점, 배열 유형 을 어떻게 정확하게 판단 하 는 지 말 할 수 있 습 니 다.
	1. typeof XXX // string boolean undefined number function object
	  : null, Date, arrary     object.
	2. XXX instanceof XXX
	3. constructor // XXX.constructor === XXX(Arrary/Date/Function)
	  :constructor       。
	4. prototype Object.prototype.toString.call(XXX) === '[object Sting/Number/Arrary/Date/Function]'

8. 암시 적 유형 전환 이 발생 할 수 있 는 장면 과 전환 원칙 은 어떻게 피하 거나 교묘 하 게 응용 해 야 합 니까? : Number () 는 수치 형 으로 강제 전환 하고 String () 은 문자열, Boolean (), parseInt (), parseFloat () 로 강제 전환 합 니 다.
console.log(0 && 123); // 0
console.log(123 && 0) //0
console.log(123 && 234) //234

9. 소수 정밀도 가 손실 되 는 원인 이 나타 나 면 자 바스 크 립 트 가 저장 할 수 있 는 최대 숫자, 최대 안전 숫자, 자 바스 크 립 트 가 큰 숫자 를 처리 하 는 방법, 정밀도 가 손실 되 지 않도록 하 는 방법
예제 코드:
	var x  = 0.3 - 0.2; //30    20  
    var y =  0.2 - 0.1; //20    10  
    x == y;             // =>false,     
    x == 0.1;           // =>false,    :0.09999999999999998
    y == 0.1;           // =>true
             Javascript     ,                      ,     C++/C#/Java                      ,  JavaScript          ,                      ,                。

2. 발생 원인 자 바스 크 립 트 는 IEEE - 745 부동 소수점 표현법 (거의 모든 프로 그래 밍 언어 를 사용) 을 사 용 했 는데 이것 은 이 진 표현법 으로 점 수 를 정확하게 나 타 낼 수 있다. 예 를 들 어 1 / 2, 1 / 8, 1 / 1024 이다.안 타 깝 게 도 우리 가 자주 사용 하 는 점수 (특히 금융 의 계산 에 있어 서) 는 모두 10 진법 점수 1 / 10, 1 / 100 등 이다.이 진 부동 소수점 표시 법 은 0.1 과 같은 간단 한 숫자 를 정확하게 표시 하지 못 한다. 상소 코드 중의 x 와 y 의 수 치 는 최종 정확 치 에 매우 가깝다. 이런 계산 결 과 는 대부분의 계산 임 무 를 감당 할 수 있다. 이 문 제 는 두 개의 값 이 같 는 지 비교 할 때 만 나타난다.javascript 의 미래 버 전 은 이러한 반올림 문 제 를 피하 기 위해 10 진법 숫자 유형 을 지원 할 수 있 습 니 다. 그 전에 큰 정 수 를 사용 하여 중요 한 금융 계산 을 하 는 것 을 원 합 니 다. 예 를 들 어 정수 '분' 을 사용 하 는 것 이 아니 라 소수 '원' 을 사용 하여 화물 비교 단위 의 연산 을 해 야 합 니 다.
  • 0.1 + 0.2 의 계산 은 우선 컴퓨터 의 측면 에서 0.1 + 0.2 라 는 소아과 처럼 보 이 는 문 제 를 생각해 야 한다.우 리 는 컴퓨터 가 읽 을 수 있 는 것 이 10 진법 이 아니 라 2 진법 이라는 것 을 알 고 있 습 니 다. 그래서 우 리 는 먼저 0.1 과 0.2 를 2 진법 으로 바 꿔 보 겠 습 니 다. 0.1 = > 0.0001 1001 1001 1001... (무한 순환) 0.2 = > 0.0011 0011 0011 0011 0011... (무한 순환) 2 정밀도 부동 소수점 의 소수 부분 은 최대 52 비트 를 지원 합 니 다.그래서 두 가 지 를 더 한 후에 이렇게 0.01001100101101101101101101101101101101101101101101101101100 을 얻 었 다. 이때 우 리 는 그것 을 10 진법 으로 바 꾸 면 0. 300000000000004 가 된다.

  • 4. 솔 루 션 (인용: 솔 루 션) 은 부동 소수점 연산 의 부정 확 한 문 제 를 해결 하기 위해 연산 하기 전에 우 리 는 연산 에 참가 한 수 를 먼저 정수 (10 의 X 의 차방) 로 업그레이드 하고 연산 이 끝 난 후에 등급 을 낮 춘 다 (0.1 의 X 의 차방).
      //     
        Number.prototype.add = function(arg){   
            var r1,r2,m;   
            try{r1=this.toString().split(".")[1].length}catch(e){r1=0}   
            try{r2=arg.toString().split(".")[1].length}catch(e){r2=0}   
            m=Math.pow(10,Math.max(r1,r2))   
            return (this*m+arg*m)/m   
        }  
        //     
    	Number.prototype.sub = function (arg){   
    	    return this.add(-arg);   
    	}   
    
    		//     
    		Number.prototype.mul = function (arg)   
    		{   
    		    var m=0,s1=this.toString(),s2=arg.toString();   
    		    try{m+=s1.split(".")[1].length}catch(e){}   
    		    try{m+=s2.split(".")[1].length}catch(e){}   
    		    return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m)   
    		}   
    
    		//     
    		Number.prototype.div = function (arg){   
    		    var t1=0,t2=0,r1,r2;   
    		    try{t1=this.toString().split(".")[1].length}catch(e){}   
    		    try{t2=arg.toString().split(".")[1].length}catch(e){}   
    		    with(Math){   
    		        r1=Number(this.toString().replace(".",""))   
    		        r2=Number(arg.toString().replace(".",""))   
    		        return (r1/r2)*pow(10,t2-t1);   
    		    }   
    		}
    

    질문

    좋은 웹페이지 즐겨찾기