1. 데이터 유형
자바스크립트는 약한 유형의 스크립트 언어로 기본 데이터 유형, 특수 데이터 유형, 복합 데이터 유형으로 구분됩니다.
1. 기본 데이터 유형: 숫자, 문자열, 부울
2. 특수 데이터 유형: null, unundefined(차이점은 null은 명시적 할당이 필요하고 정의되지는 할당이 없음을 의미함)
3. 복합(참조 ) 데이터 유형: 객체(배열은 특수 객체입니다)
참고: 기본 데이터 유형과 참조 데이터 유형의 차이점을 이해하세요. 함수 매개변수 전달
2. 패키징 클래스와 기본 데이터형의 관계
기본 데이터형에는 그에 상응하는 패키징 클래스(객체 객체)가 있습니다.
숫자, 문자열, 부울
참고: 기본 데이터 유형은 특정 조건에서 기본 유형 패키징 객체로 변환됩니다.
var str="기본 문자열입니다."
var length=str.length()//When length()를 사용하면 Javascript 해석 엔진은
//str의 임시 String 개체를 생성합니다. 실행 후 임시 개체는 지워집니다.
3. 데이터 유형
(1) typeof(tasteless) 다음 6가지 데이터 유형만 감지할 수 있습니다: 숫자, 문자열, 부울, 정의되지 않음, 객체, 함수(참고!)
alert(typeof(null)) //결과는 객체
alert(typeof(a)); // a가 할당되지 않았고 결과가 정의되지 않았습니다
따라서 기본 데이터 유형은 다음과 같이 결정될 수 있습니다.
function type(o) {
return (o === null) ? 'null' : typeof(o);
}
(2) instanceof
그러나 복합 데이터 유형(함수 제외)의 경우 typeof 객체가 다른 객체의 인스턴스인지 여부를 감지하려면 인스턴스를 사용할 수 있습니다. 피연산자는 객체여야 합니다.
function Animal() {} ;
function Pig() {}
Pig.prototype = new Animal();
alert(new Pig() instanceof Animal); // true
인스턴스 자체의 유형을 감지하는 데 적합하지 않습니다
(3) constructor
alert(1.constructor) / / 오류 보고
var o = 1;
alert(o.constructor); // 숫자
o = null; // 또는 정의되지 않음
alert(o.constructor); 🎜>alert({}.constructor); // 객체
alert(true.constructor); // 부울
(4 ) Object.toString()
return Object.prototype.toString. call(o) === '[object Array]';
}
call과 apply의 차이점:
이들은 모두 Function.prototype의 메소드입니다( 메소드)는 Javascript 엔진에 의해 내부적으로 구현됩니다.
사실 이 둘의 기능은 거의 동일합니다. 주목해야 할 점은 call(thisObj[,arg1[, arg2[,))의 arg 매개변수는 변수일 수 있지만 apply([thisObj[ ,argArray]] )는 배열 컬렉션입니다.
메서드는 작업을 완료하기 위해 다른 개체를 호출하는 데 사용됩니다. 원칙적으로 메서드가 실행되면 컨텍스트 개체가 변경됩니다.
(5) 요약
_types = {
'정의되지 않음' : '정의되지 않음',
'숫자' : '숫자',
'boolean' : '부울',
'string' : '문자열',
'[객체 함수]' : '함수',
'[객체 RegExp]' : 'regexp',
'[객체 배열]' : '배열',
'[객체 날짜] ' : '날짜',
'[객체 오류]' : '오류'
}
function type(o) {
return _types[typeof o] || .call(o)] || ( o ? '객체' : 'null')
}
4. 데이터 유형 변환 자바스크립트에는 두 가지 데이터 유형 변환 방법이 있습니다.
하나는 전체 값을 한 유형에서 다른 데이터 유형으로 변환하는 것입니다(기본 데이터 유형 변환이라고 함).
또 다른 방법은 하나의 값에서 다른 유형의 값을 추출하여 변환 작업을 완료하는 것입니다.
세 가지 기본 데이터 유형 변환 방법이 있습니다.
1. 문자 유형으로 변환: String(); 예: String(678)의 결과는 "678"입니다.
2. 숫자 유형으로 변환: Number (); 예: Number("678")의 결과는 678
3. Boolean 유형으로 변환: Boolean(); 예: Boolean("aaa")의 결과는 true
값에서 추출 또 다른 유형의 값은 다음과 같습니다.
1. 문자열에서 정수를 추출합니다:parseInt(); 예:parseInt("123zhang")의 결과는 123입니다.
2. 문자열에서 부동소수점을 추출합니다. :parseFloat(); 예:parseFloat("0.55zhang")의 결과는 0.55입니다
또한 다양한 유형 변환 방법을 요약합니다
숫자가 변환됩니다. 문자열로 :String(number),
Number.toString(2/8/16);//2진수, 8진수, 16진수, 기본(매개변수 없음) 10진수,
toFixed(3) //10진수 유지 point 마지막 3자리
toExponextial(3); // 소수점 앞 1자리, 소수점 뒤 3자리 예: n.toExponextial(3); 🎜> toPrecision(4) ; //지정된 자릿수를 반환합니다. 자릿수가 완전히 표시되지 않으면 지수 표기법을 사용합니다(세 가지 방법 모두 4에서 5로 반올림됨)
5. 기타 요약( 간과하기 쉬운 것)
1.parseInt의 함정 다음 부분은 "Javascript Essence"에서 발췌합니다.
parseInt는 문자열을 정수로 변환하는 함수입니다. 숫자가 아닌 값을 발견하면 구문 분석을 중지하므로,parseInt("16")는parseInt("16tons")와 동일한 결과를 생성합니다. 함수가 추가 텍스트가 있다는 것을 알려주면 좋겠지만 그렇지 않습니다.
문자열의 첫 번째 문자가 0이면 문자열은 10진수가 아닌 8진수를 기준으로 평가됩니다. 8진수에서 8과 9는 같은 숫자가 아니므로,parseInt("08")와parseInt("09")는 결과적으로 0을 생성합니다. 이 버그는 프로그램이 날짜와 시간을 구문 분석할 때 문제를 일으킵니다. 다행히도,parseInt는 기수를 인수로 받아들일 수 있으므로,parseInt("08",10)은 8을 반환합니다. 항상 이 기수 인수를 제공하는 것이 좋습니다.
또한. 다음은 1을 표시합니다:
alert(parseInt(0.0000001))
이는 js가 특정 정밀도를 초과하는 경우 숫자를 기록하기 위해 과학적 표기법을 사용하기 때문입니다. 예:
Alert(0.0000001 );
은 1e-7을 가져오고,parseInt는 자동으로 매개변수를 문자열로 변환합니다. 이는
s = (0.0000001).toString()
alert(parseInt(s));
드디어 1등을 한 것도 놀랍지 않습니다.
parseInt를 사용할 때 매개변수가 문자열로 변환된 후 변환된다는 점을 기억해야 합니다.