valueOf 및 toString
10643 단어 toString
var add = function() {___}; console.log(add(3)(4)(5)); // 60
제목은 무한 곱하기가 필요합니다.add 함수를 보충해 주십시오.
우선,dd 함수는 매개 변수를 가진function을 되돌려야 하며, 그렇지 않으면 후속적인 곱셈 작업을 할 수 없다.그 다음에 마지막까지 곱하면 매개 변수가 없습니다.add 함수는 직접 수치를 되돌려야 합니다.사실 이것은 깊이 있는 함수와 유사하여 n의 값에 따라 귀속된다.
1 var add = function(n) {
2 if(n === 5)
3 return n;
4 return n * add(n + 1);
5 }
6 console.log(add(3));
두 번째 줄은 매개 변수가 없을 때의 판단 조작과 같고, 네 번째 줄은 매개 변수를 가진 방법을 되돌리는 것과 같다.이 문제의 난점은 값의 누적이다. 만약에 전역 변수 저장 값을 설정할 수 있다면 매우 편리할 것이다. 중간 변수가 없기 때문에 js 함수 특성에 따라 함수만 되돌릴 수 있고 함수와 숫자가 곱하는 방식은 되돌릴 수 없다.글로벌 변수를 설정할 수 있는 경우:
1 var add = function(n) {
2 ans *= n;
3 return add;
4 }
5 var ans = 1;
6 add(5)(4)(3);
7 console.log(ans);
함수를 되돌려야 하기 때문에 값의 누적을 실현해야 하고 변수를 추가할 수 없기 때문에 누적된 값을 매개 변수로만 전달할 수 있습니다.
1 var add = function(a) {
2 var temp = function(b) {
3 return add(a * b);
4 }
5 return temp;
6 }
그럼,add(3)(4)(5)는 상기 코드에서 어떻게 작동합니까?1단계 a=3, b=4, 연산 후add(3*4)(5), 2단계, a=12, b=5, 연산 후add(3*4*5), 3단계 a=60 전입,temp 방법return, 컨트롤러에서 다음과 같이 보십시오.
function (b) {
return add(a * b);
}
이때 function의 toString과 valueOf 방법을 주목해야 한다.toString과 valueOf 방법을 다시 쓰면 답을 얻을 수 있습니다.
1 var add = function(a) {
2 var temp = function(b) {
3 return add(a * b);
4 }
5 temp.toString = temp.valueOf = function() {
6 return a;
7 }
8 return temp;
9 }
10 console.log(add(3)(4)(5));
valueOf & toString 정보:
js에null을 제외한 모든 대상은valueOf와toString 방법이 있습니다. 일반적인 상황에서 대상은 toString 방법을 먼저 호출한 다음valueOf를 호출합니다.
var bbb = {
toString: function() {
console.log('toString');
return 10;
},
valueOf: function() {
console.log('valueOf');
return 10;
}
}
alert(bbb);// 10 toString
alert(+bbb); // 10 valueOf
alert(''+bbb); // 10 valueOf
alert(String(bbb)); // 10 toString
alert(Number(bbb)); // 10 valueOf
alert(bbb == '10'); // true valueOf
alert(bbb === '10'); // false
이것은 사도 정미의 한 예인데, 그도 결과에 대해 해석을 했다.문자열로 변환할 때 toString 방법을 호출하고, 수치로 변환할 때valueOf 방법을 호출하지만, 그 중 두 가지는 매우 조화롭지 않다. 하나는 alert('+bb), 문자열 조합은 toString 방법을 호출하는 것이다. 다른 하나는 = = 조작부호가 은식 변환을 하지 않기 때문에 호출하지 않는다는 것이다.진상을 추궁하기 위해서 우리는 더욱 엄밀한 실험이 필요하다.
var aa = {
i: 10,
toString: function() {
console.log('toString');
return this.i;
}
}
alert(aa);// 10 toString
alert(+aa); // 10 toString
alert(''+aa); // 10 toString
alert(String(aa)); // 10 toString
alert(Number(aa)); // 10 toString
alert(aa == '10'); // true toString
aa가 valueOf 방법을 다시 쓰지 않았기 때문에 실제 운행할 때 먼저 toString 방법을 찾는다. 예를 들어alert(+aa)는 사실valueOf 방법을 우선적으로 호출해야 하지만 valueOf가 있기 때문에 그 다음에 toString을 호출해야 한다.
var bb = {
i: 10,
valueOf: function() {
console.log('valueOf');
return this.i;
}
}
alert(bb);// [object Object]
alert(+bb); // 10 valueOf
alert(''+bb); // 10 valueOf
alert(String(bb)); // [object Object]
alert(Number(bb)); // 10 valueOf
alert(bb == '10'); // true valueOf
상기 결과는 그다지 조화롭지 않은 것 같다. 사고방식에 따라 toString 방법이 없기 때문에value Of를 호출한다. 그러나 왜 1과 4가 출력되는지는 [object object]이다.사도 정미는 Object의 toString 방법을 계승하여 제거를 시도한 후
Object.prototype.toString = null;
var cc = {
i: 10,
valueOf: function() {
console.log('valueOf');
return this.i;
}
}
alert(cc);// 10 valueOf
alert(+cc); // 10 valueOf
alert(''+cc); // 10 valueOf
alert(String(cc)); // 10 valueOf
alert(Number(cc)); // 10 valueOf
alert(cc == '10'); // true valueOf
toString만 다시 쓰면 대상이 변환될 때 valueOf의 존재를 무시하고 변환합니다.단, valueOf 방법만 다시 쓰면 문자열로 변환할 때 toString 방법을 우선적으로 고려합니다.toString을 호출할 수 없는 상황에서 valueOf만 출전시킬 수 있습니다.그 이상한 문자열 연결 문제는 조작부호에서 나온 것일 수도 있습니다. ECMA262-5를 펼치면 getValue 작업이 있습니다.응, 그럼 수수께끼가 풀렸을 거야.다시 쓰기는 호출의 최적화를 높일 수 있지만, 조작부호가 있는 상황에서valueOf의 우선순위는 원래 toString보다 높다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
java oop 22 Object 클래스Object 클래스 - 모든 클래스의 최고 조상 - 부모가 없는 클래스는 자동적으로 Object 클래스를 상속받게 된다. - 모든 클래스는 Object클래스에 정의된 11개의 메서드를 상속받는다 toString(),...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.