Baseline Widely available
Object
å®ä¾ç valueOf()
æ¹æ³å° this
å¼è½¬æ¢æå¯¹è±¡ãè¯¥æ¹æ³æ¨å¨è¢«æ´¾ç对象éåï¼ä»¥å®ç°èªå®ä¹ç±»å转æ¢é»è¾ã
function MyNumberType(n) {
this.number = n;
}
MyNumberType.prototype.valueOf = function () {
return this.number;
};
const object1 = new MyNumberType(4);
console.log(object1 + 3);
// Expected output: 7
è¯æ³ åæ°
æ ã
è¿åå¼è½¬æ¢æå¯¹è±¡ç this
å¼ã
夿³¨ï¼ 为äºä½¿ valueOf
å¨ç±»å转æ¢è¿ç¨ä¸æç¨ï¼å®å¿
é¡»è¿åä¸ä¸ªåºæ¬ç±»åå¼ãå 为ææçåºæ¬ç±»å齿èªå·±ç valueOf()
æ¹æ³ï¼æä»¥è°ç¨ aPrimitiveValue.valueOf()
é常ä¸ä¼è°ç¨ Object.prototype.valueOf()
ã
JavaScript è°ç¨ valueOf
æ¹æ³æ¥å°å¯¹è±¡è½¬æ¢æåºæ¬ç±»åå¼ãä½ å¾å°éè¦èªå·±è°ç¨ valueOf
æ¹æ³ï¼å½éå°éè¦åºæ¬ç±»åå¼ç对象æ¶ï¼JavaScript ä¼èªå¨çè°ç¨è¯¥æ¹æ³ã
å¼ºå¶æ°åç±»å转æ¢å强å¶åºæ¬ç±»å转æ¢ä¼å
ä¼è°ç¨è¯¥æ¹æ³ï¼è强å¶å符串转æ¢ä¼ä¼å
è°ç¨ toString()
ï¼å¹¶ä¸ toString()
å¾å¯è½è¿åå符串å¼ï¼çè³å¯¹äº Object.prototype.toString()
åºæ¬å®ç°ä¹æ¯å¦æ¤ï¼ï¼å æ¤å¨è¿ç§æ
åµä¸ä¸ä¼è°ç¨ valueOf()
ã
ä» Object.prototype
ç»§æ¿çææå¯¹è±¡ï¼å³ï¼é¤äºnull
åå对象ä¹å¤çææå¯¹è±¡ï¼é½ç»§æ¿äº toString()
æ¹æ³ãObject.prototype.valueOf()
çåºæ¬å®ç°è¢«ææè®¾è®¡ä¸ºæ ç¨çï¼è¿åä¸ä¸ªå¯¹è±¡ï¼å
¶è¿åå¼å°æ°¸è¿ä¸ä¼è¢«ä»»ä½åºæ¬ç±»å转æ¢ç®æ³ä½¿ç¨ã许å¤å
置对象éåæ¤æ¹æ³ä»¥è¿åéå½çåºæ¬ç±»åå¼ãå建èªå®ä¹å¯¹è±¡æ¶ï¼å¯ä»¥éå valueOf()
æ¥è°ç¨èªå®ä¹æ¹æ³ï¼ä»¥ä¾¿å°èªå®ä¹å¯¹è±¡è½¬æ¢ä¸ºåºæ¬ç±»åå¼ãé常ï¼valueOf()
ç¨äºè¿å对对象å
·ææä¹çå¼ââä¸ toString()
ä¸åï¼å®ä¸éè¦å符串ãæè
ï¼ä½ å¯ä»¥æ·»å ä¸ä¸ª [Symbol.toPrimitive]()
æ¹æ³ï¼è¯¥æ¹æ³å
许对转æ¢è¿ç¨è¿è¡æ´å¤æ§å¶ï¼å¹¶ä¸å¯¹äºä»»ä½ç±»åç转æ¢ï¼å§ç»ä¼å
äº valueOf
æ toString
ã
åºæ¬ç valueOf()
æ¹æ³è¿å this
弿¬èº«ï¼å¦æå°æªè½¬æ¢ä¸ºå¯¹è±¡ï¼åè½¬æ¢æå¯¹è±¡ãå æ¤ï¼ä»»ä½åºæ¬ç±»å转æ¢ç®æ³é½ä¸ä¼ä½¿ç¨å®çè¿åå¼ã
const obj = { foo: 1 };
console.log(obj.valueOf() === obj); // true
console.log(Object.prototype.valueOf.call("primitive"));
// [String: 'primitive']ï¼ä¸ä¸ªå
è£
对象ï¼
éåèªå®ä¹å¯¹è±¡ç valueOf
ä½ å¯ä»¥å建ä¸ä¸ªè¦è°ç¨ç彿°æ¥ä»£æ¿é»è®¤ç valueOf
æ¹æ³ãä½ ç彿°ä¸åºè¯¥æ¥åä»»ä½åæ°ï¼å 为å¨ç±»åè½¬æ¢æé´è°ç¨å®æ¶ä¸ä¼ä¼ éä»»ä½åæ°ã
ä¾å¦ï¼ä½ å¯ä»¥å° valueOf
æ¹æ³æ·»å å°èªå®ä¹ç±» Box
ä¸ã
class Box {
#value;
constructor(value) {
this.#value = value;
}
valueOf() {
return this.#value;
}
}
æäºåé¢ç代ç ï¼ä»»ä½æ¶åå¨å° Box
ç±»åçå¯¹è±¡è¡¨ç¤ºä¸ºåºæ¬ç±»åå¼ï¼ä½ä¸æ¯ç¹å®çå符串ï¼çä¸ä¸æä¸ä½¿ç¨æ¶ï¼JavaScript é½ä¼èªå¨è°ç¨åé¢ä»£ç ä¸å®ä¹ç彿°ã
const box = new Box(123);
console.log(box + 456); // 579
console.log(box == 123); // true
对象ç valueOf
æ¹æ³éå¸¸ç± JavaScript è°ç¨ï¼ä½ä½ å¯ä»¥æç
§å¦ä¸æ¹å¼èªå·±è°ç¨å®ï¼
ä¸å
å ï¼+ï¼å¯¹å
¶æä½æ°è¿è¡å¼ºå¶æ°å转æ¢ï¼å¯¹äºå¤§å¤æ°æ²¡æ [Symbol.toPrimitive]()
ç对象ï¼è¿æå³çè°ç¨å
¶ valueOf()
ã使¯ï¼å¦æå¯¹è±¡æ²¡æèªå®ä¹ç valueOf()
æ¹æ³ï¼ååºæ¬å®ç°å°å¯¼è´å¿½ç¥ valueOf()
ï¼èä½¿ç¨ toString()
çè¿åå¼ã
+new Date(); // å½åæ¶é´æ³ï¼ä¸ new Date().getTime() ç¸å
+{}; // NaNï¼toString() è¿å "[object Object]"ï¼
+[]; // 0ï¼toString() è¿åä¸ä¸ªç©ºçå符串å表ï¼
+[1]; // 1ï¼toString() è¿å "1"ï¼
+[1, 2]; // NaNï¼toString() è¿å "1,2"ï¼
+new Set([1]); // NaNï¼toString() è¿å "[object Set]"ï¼
+{ valueOf: () => 42 }; // 42
è§è æµè§å¨å
¼å®¹æ§ åè§
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4