toString() 및 Object.prototype.toString.call()
1.toString()
우리 먼저 데모를 보자.var t1 = {a: 1};
var t2 = [1,2];
var t3 = 'str';
console.log(t1.toString()) //"[object Object]"
console.log(t2.toString()) //"1,2"
console.log(t3.toString()) // "str"
위의 예에서 우리는 대상, 그룹, 문자열 세 가지 유형을 정의하여 toString
방법을 호출했지만 결과는 완전히 다르다.이상하다
예를 들면,
var t1 = {a: 1};
var t2 = [1,2];
var t3 = 'str';
console.log(t1.toString()) //"[object Object]"
console.log(t2.toString()) //"1,2"
console.log(t3.toString()) // "str"
그래서 결과적으로 유형에 따라
toString
의 방법과 기능이 다른 것 같다(이름은 토스트링이지만).대상의 원형과 기본 포장 유형을 알고 계신 분들은 모두 알고 계십니다. 위의 예에서 다음과 같습니다.
Array.prototype toString
은 직접 계승하고 Array.prototype.__proto__ Object.prototype toString
을 찾지 않기 때문에 서로 다른 유형의 원형 체인식은 많든 적든 토스트링 방법을 다시 썼기 때문에 기능용도가 다르다.다음에 서로 다른 유형의 toString () 방법을 호출하는 방법을 다시 한 번 분석해 봅시다. 반환 값은 어떤 차이가 있습니까?
1.1.문자열string (즉 new String에서 나온 기본 포장 형식을 호출하는 방법)
문자열의 사본 (즉 그대로 출력) 을 되돌려줍니다.
var str = "a";
str.toString(); //"a"
String.prototype.toString.call(str) // "a"
1.2.숫자 number (즉 new Number에서 나오는 기본 포장 유형을 호출하는 방법)
문자열 형식의 수치를 되돌려줍니다
var num = 520;
num.toString(); //"520"
Number.prototype.toString.call(num) // "a"
1.3.부울 값boolean (즉 new Boolean에서 나오는 기본 포장 형식을 호출하는 방법)
문자열 "true"또는 "false"를 반환합니다.
var boo = true;
boo.toString(); //"true"
Boolean.prototype.toString.call(boo); //"true"
1.4.유일무이한 값symbol(즉 구조 함수 Symbol을 호출하여 생성하는 실례적인 방법입니다. 여기 호출은 일반적인 구조 함수와 다르며 new가 필요하지 않습니다. 직접 호출하십시오)
반환 문자열 "Symbol()"
var symbol = Symbol();
symbol.toString(); //"Symbol()"
Symbol.prototype.toString.call(symbol); //"Symbol()"
1.5.null 및 undefined
null과undefined는 상응하는 구조 함수가 없기 때문에 tostring () 방법을 호출할 수 없습니다. 즉, 속성과 방법에 접근할 수 없고 기본 형식일 뿐입니다.
16. 객체 object(Object.prototype을 호출하는 방법)
type이 대상인
[object type]
을 반환합니다.var t1 = {a: 1};
t1.toString() //"[object Object]"
Object.prototype.toString.call(t1); //"[object Object]"
1.7.배열 Array(즉, Array.prototype을 호출하는 방법)
그룹의 모든 값의 문자열 형식으로 연결된 쉼표로 구분된 문자열을 되돌려줍니다
var array = [1, 's', true, {a: 2}];
array.toString();//"1,s,true,[object Object]"
Array.prototype.toString.call(array);//"1,s,true,[object Object]"
1.8.함수 function(Function.prototype 호출 방법)
함수를 반환하는 코드
function foo(){
console.log(1');
};
foo.toString();
Function.prototype.toString.call(foo);
그래서:
Object.toString();
//"function Object() { [native code] }"
Function.toString();
//"function Function() { [native code] }"
Array.toString();
//"function Array() { [native code] }"
....
... 때문에
Array.__proto__===Function.prototype //true
Object.__proto__===Function.prototype //true
Function.__proto__===Function.prototype //true
1.9.날짜 Date(Date.prototype 호출 방법)
시간대 정보가 있는 날짜와 시간을 되돌려줍니다
var date = new Date();
date.toString();
//"Fri May 11 2018 14:55:43 GMT+0800 ( )"
Date.prototype.toString.call(date);
//"Fri May 11 2018 14:55:43 GMT+0800 ( )"
1.10.정규 표현식(RegExp.prototype 호출 방법)
정규 표현식의 문자열 형식을 되돌려줍니다
var re = /cat/g;
re.toString();// "/cat/g"
RegExp.prototype.toString.call(re);// "/cat/g"
1.11.전역 객체 window
[object window]
으로 돌아가기window.toString(); //"[object Window]"
Object.prototype.toString.call(window); //"[object Window]"
윈도는 js의 특수한 대상이다. 윈도는 구조 함수가 아니다. 즉, 윈도가 없다는 것이다.prototype 원형 대상에 toString () 방법을 다시 쓰는 방법은 원형 체인을 따라 Object를 호출합니다.prototype.toString().
2.Object.prototype.toString.call( )
위에서 우리는 직접 호출과call 호출 두 가지 방식을 통해 toString
방법 테스트를 진행한다.우리는 Object가 되돌아오는 결과가 [object type]
인 것을 알고 있으며, 그 중에서 type을 대상으로 하는 유형은 `이므로, 그 되돌아오는 대상의 기능에 따라 유형을 판단할 수 있다.Object.prototype.toString.call({});
Object.prototype.toString.call([]);
Object.prototype.toString.call(function(){});
Object.prototype.toString.call('');
Object.prototype.toString.call(1);
Object.prototype.toString.call(true);
Object.prototype.toString.call(null);
Object.prototype.toString.call(undefined);
Object.prototype.toString.call();
Object.prototype.toString.call(new Date());
Object.prototype.toString.call(/at/);
3. 직접 호출 toString();
(function(){
console.log(toString());
})();
즉, Tostring () 방법을 직접 호출하는 것은Object.prototype.toString.call();
Object.prototype.toString.call(undefined);
즉: Tostring () 방법을 직접 호출하는 것은 전역 역할 영역에서 Tostring () 방법을 호출하는 것으로 이해할 수 없습니다. 즉 window입니다.toString()
그래서 직접 Tostring () 을 호출하면 변형된undefined일 것입니다.string () 방법 (여기에서 말한 것은 실제 undefined는 방법이 없고 호출이 잘못될 수 있다는 것과 같다.)
4.toString.call/apply(유형)
자주 토스트링을 써요.Object 대신 call/apply (유형) 를 사용하십시오.prototype.toString.call/apply(유형) 사용은 사실 엄격하지 않아서 문제를 일으키기 쉽다. 아래와 같다.function toString(){
console.log(1")
}
toString();//1
toString.call({});//1
toString.call([]);//1
우리가 tostring () 방법을 사용자 정의할 때 tostring () 방법을 직접 호출하면 Object 종류의 tostring () 방법을 기본으로 사용하지 않고 사용자 정의 방법을 사용합니다. 이렇게 하면 우리가 원하는 결과를 얻을 수 없기 때문에 가능한 한 Object를 사용해야 합니다.prototype.toString.call/apply (유형).
5.유형
토스트링 () 방법과 같이 Object의 서로 다른 하위 유형은 toLocaleString()、valueOf()
을 다시 썼습니다. 여기서 제가 말하고 싶은 것은 대상 하위 유형이 어떻게 다시 쓰든지 간에 우리가 이 방법들이 어디에서 왔고 어떻게 호출되었는지 알면 이 방법들이 호출된 후에 생성된 결과를 잘 이해할 수 있습니다!
결국 JS의 대상과 원형에 대한 이해는 정말 중요하다!
6. 참조
Object에서prototype.toString.call () 는 toString () 방법에 대한 사고를 불러일으킨다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
Object.prototype.toString.call({});
Object.prototype.toString.call([]);
Object.prototype.toString.call(function(){});
Object.prototype.toString.call('');
Object.prototype.toString.call(1);
Object.prototype.toString.call(true);
Object.prototype.toString.call(null);
Object.prototype.toString.call(undefined);
Object.prototype.toString.call();
Object.prototype.toString.call(new Date());
Object.prototype.toString.call(/at/);
toString();
(function(){
console.log(toString());
})();
즉, Tostring () 방법을 직접 호출하는 것은
Object.prototype.toString.call();
Object.prototype.toString.call(undefined);
즉: Tostring () 방법을 직접 호출하는 것은 전역 역할 영역에서 Tostring () 방법을 호출하는 것으로 이해할 수 없습니다. 즉 window입니다.toString()
그래서 직접 Tostring () 을 호출하면 변형된undefined일 것입니다.string () 방법 (여기에서 말한 것은 실제 undefined는 방법이 없고 호출이 잘못될 수 있다는 것과 같다.)
4.toString.call/apply(유형)
자주 토스트링을 써요.Object 대신 call/apply (유형) 를 사용하십시오.prototype.toString.call/apply(유형) 사용은 사실 엄격하지 않아서 문제를 일으키기 쉽다. 아래와 같다.function toString(){
console.log(1")
}
toString();//1
toString.call({});//1
toString.call([]);//1
우리가 tostring () 방법을 사용자 정의할 때 tostring () 방법을 직접 호출하면 Object 종류의 tostring () 방법을 기본으로 사용하지 않고 사용자 정의 방법을 사용합니다. 이렇게 하면 우리가 원하는 결과를 얻을 수 없기 때문에 가능한 한 Object를 사용해야 합니다.prototype.toString.call/apply (유형).
5.유형
토스트링 () 방법과 같이 Object의 서로 다른 하위 유형은 toLocaleString()、valueOf()
을 다시 썼습니다. 여기서 제가 말하고 싶은 것은 대상 하위 유형이 어떻게 다시 쓰든지 간에 우리가 이 방법들이 어디에서 왔고 어떻게 호출되었는지 알면 이 방법들이 호출된 후에 생성된 결과를 잘 이해할 수 있습니다!
결국 JS의 대상과 원형에 대한 이해는 정말 중요하다!
6. 참조
Object에서prototype.toString.call () 는 toString () 방법에 대한 사고를 불러일으킨다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
function toString(){
console.log(1")
}
toString();//1
toString.call({});//1
toString.call([]);//1
토스트링 () 방법과 같이 Object의 서로 다른 하위 유형은
toLocaleString()、valueOf()
을 다시 썼습니다. 여기서 제가 말하고 싶은 것은 대상 하위 유형이 어떻게 다시 쓰든지 간에 우리가 이 방법들이 어디에서 왔고 어떻게 호출되었는지 알면 이 방법들이 호출된 후에 생성된 결과를 잘 이해할 수 있습니다!결국 JS의 대상과 원형에 대한 이해는 정말 중요하다!
6. 참조
Object에서prototype.toString.call () 는 toString () 방법에 대한 사고를 불러일으킨다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.