[관련 권장사항: JavaScript 비디오 튜토리얼, 웹 프론트엔드]
이 기사에서는 매우 흥미로운 개념, 즉 기본 유형의 속성 메소드를 탐구할 것입니다. 어때요, 좀 당황스럽나요? 천천히 말씀드리죠~
Java
, C++
등 다른 객체지향 프로그래밍 언어에서는 속성(attribute)이 객체의 고유한 개념이고, 기본형(basic type)은 속성 메소드(attribute method)라는 개념이 없습니다.
예, 이는 JavaScript
의 또 다른 나쁜 아이디어입니다. 해당 엔진을 사용하면 속성 메서드를 사용하여 객체와 같은 기본 유형의 데이터를 조작할 수 있습니다.
이 이상한 기능을 설명하기 전에 먼저 기본 유형과 객체 유형의 차이점이 무엇인지 명확히 해야 합니까?
JavaScript
의 기본 유형 중 하나입니다.7
JavaScript
String
, Number
, Boolean
, BigInt
, Symbol
, null
및 undefined
{ }
하는 데이터 패킷이{ }
여러 값을 생성하고 저장할 수 있습니다.JavaScript
함수와 같은 다른 유형의 개체도 있습니다. 개체 지향의 주요 기능은 모든 종류의 복잡한 데이터와 메서드를 하나로 저장할 수 있는 캡슐화 입니다. object. 따라서 사용의 복잡성이 줄어듭니다.
예:
사용자 = { 이름: "샤오밍", 안녕하세요() { console.log(`안녕하세요, 저는 ${this.name}입니다`); }}user.hello();
객체 user
의 속성과 메소드를 객체로 캡슐화하므로 사용이 매우 간단합니다. 메소드나 속성을 호출하려면 obj.attr
만 사용하면 됩니다.
그러나 이렇게 하면 추가 오버헤드가 발생하며(객체 지향에는 추가 오버헤드가 있음) 이는 객체 지향 언어 C++
가 C
보다 느린 경우이기도 합니다.
기본 유형을 객체로 사용할 때 조정하기 어려운 두 가지 문제가 있습니다.
"abc".toUpperCase()
와 같은 객체를 사용하는 것과 동일할 수 있기를 바랍니다.JavaScript
위의 문제를 매우 "간단한" 방식으로 해결하는 것입니다.
String
, Number
, Boolean
및 Symbol
메소드 및 속성에 대한 액세스를 허용합니다.위 규칙의 의미는 기본 유형이 여전히 기본 유형이라는 것입니다. 그러나 기본 유형의 메서드와 속성에 액세스하려면 기본 유형을 객체(객체 래퍼)로 래핑한 다음 어떻게 해야 할까요? 접근이 완료된 후 파기하세요. 솔직히 말하면 좀 우스꽝스러운 것 같습니다.
예
:let name = "Trump";console.log(name.toUpperCase());//기본 유형에 액세스하는 방법
위 코드의 실행 결과는 다음과 같습니다.
큰 문제는 없어 보이지만 많은 일이 일어났고, 다음 사항을 알아야 합니다.
name
속성 메서드에 액세스할 때name
내용이 없습니다.toUpperCase
메소드가 있습니다.toUpperCase
메소드 를 호출하면자체의 값이 다음과 같이 변경되지 않습니다.
해결책은 타협(나쁜 아이디어)으로 가득 차 있지만 결과는 여전히 좋으며 달성한 성과는 다음과 같습니다.
이론적으로는 사실이지만 JavaScript
엔진은 이 프로세스에 고도로 최적화되어 있으며 추가 개체를 전혀 생성하지 않는 것으로 생각됩니다. 그는 마치 자신에게 임시적인 물건이 있는 것처럼 규칙을 준수한다고 말로만 말했습니다.
이 기사에서는 기본 유형 메소드의 개념을 간략하게 소개하고 다양한 메소드를 설명하지 않습니다. 튜토리얼이 계속 진행됨에 따라 점차적으로 많은 메소드가 포함됩니다. 여기서는 기본 유형의 일반적으로 사용되는 메소드와 속성을 간략하게 나열합니다.
다양한 기본 유형에는 다음 범주에 나열된 다양한 속성 메소드가 있습니다.
length
속성은 문자열 길이를 반환합니다.
console.log("abc".length);
위 코드의 결과는 다음과 같습니다.
indexOf(ch)
메서드는 ch
console.log("abc".indexOf('b'));console.log("abc".indexOf('d'))에서 첫 번째 문자 ch의
첨자
를 반환합니다.코드 실행 결과는 다음과 같습니다.
문자열에 해당 문자가 있으면 인덱스( 0
부터 계산)를 반환하고, 없으면 -1
반환합니다.
concat(str)
메서드, 두 문자열 연결
let str1 = "hello ";let str2 = "world!";console.log(str1.concat(str2));console.log(str1);console.log(str2 );
코드 실행 결과는 다음과 같습니다.
replace(str1,str2)
메소드, str2
사용하여 str1
대체합니다.
let
str = "javascript";console.log(str.replace('java','996'));console.log(str);
다음과 같이:
toFixed(num)
메소드, 소수점 이하 자릿수를 지정된 정밀도로 반올림
console.log(9.3333333.toFixed(3));
코드 실행 결과는 다음과 같습니다.
toString()
메서드, 숫자를 문자열로 변환
3.14.toString();//'3.14'로 변환console.log((8).toString(2));//바이너리 '1000'으로 변환console.log((( 9).toString(2));//바이너리 '1001'로 변환console.log((996).toString(16));//16진수 문자열 '3e4'로 변환
코드 실행 결과는 다음과 같습니다.
toExponential()
메소드, 지수 계산 메소드로 변환됨
console.log(3.1415926.toExponential()); console.log(3.1415926.toExponential(2));
코드 실행 결과는 다음과 같습니다
.다음과 같이:
더 많은 방법은 다음 장에서 보여줄 것이므로 여기서는 자세히 다루지 않겠습니다.
Java
와 마찬가지로 JavaScript
new
연산자를 통해 기본 유형에 대한 "객체 래퍼"를 명시적으로 생성할 수 있습니다. 이 접근 방식은 단지 무결성을 위해 언급된 것입니다.
이 접근 방식에는 문제가 있습니다. 예를 들면 다음과 같습니다.
let num = new Number(0);console.log(typeof num);console.log(typeof 0);
코드 실행 결과는 다음과 같습니다.
혹은 판단에 혼선이 있을 수 있습니다:
let zero = new Number(0);if (zero) { // zero는 객체이기 때문에 true입니다. console.log('true');}
코드 실행 결과는 다음과 같습니다. 다음과 같습니다:
동시에 new
(키워드)가 없는 String/Number/Boolean
함수는 값을 해당 유형(문자열, 숫자 또는 부울 값(원본 유형))으로 변환할 수 있다는 점을 잊지 마십시오.
예를 들면 다음과 같습니다.
console.log(typeof Number('123'));
에는 JavaScript가 사용되지만참고:
null
및undefined
두 가지 유형
JavaScript
null
undefined
이외의 기본 유형이 많이 제공됩니다
타협된 구현 방법이지만 상대적으로 만족스러운 결과를 얻었고, 더 낮은 비용으로 기본 유형의 속성 및 메소드 호출을 구현했습니다.
[관련 권장 사항: JavaScript 비디오 자습서, 웹 프론트 엔드]
위는 JavaScript가 기본 유형이 동일하다는 것을 인식하는 방법입니다. 속성과 객체를 객체로 사용하는 방법에 대한 자세한 내용은 소스 코드 네트워크의 다른 관련 기사를 참고하세요!