# å è£ å¯¹è±¡ ## å®ä¹ å¯¹è±¡æ¯ JavaScript è¯è¨æä¸»è¦çæ°æ®ç±»åï¼ä¸ç§åå§ç±»åçå¼ââæ°å¼ãå符串ãå¸å°å¼ââå¨ä¸å®æ¡ä»¶ä¸ï¼ä¹ä¼èªå¨è½¬ä¸ºå¯¹è±¡ï¼ä¹å°±æ¯åå§ç±»åçâå è£ å¯¹è±¡âï¼wrapperï¼ã æè°âå è£ å¯¹è±¡âï¼æçæ¯ä¸æ°å¼ãå符串ãå¸å°å¼åå«ç¸å¯¹åºç`Number`ã`String`ã`Boolean`ä¸ä¸ªåç对象ãè¿ä¸ä¸ªåç对象å¯ä»¥æåå§ç±»åçå¼åæï¼å è£ æï¼å¯¹è±¡ã ```javascript var v1 = new Number(123); var v2 = new String('abc'); var v3 = new Boolean(true); typeof v1 // "object" typeof v2 // "object" typeof v3 // "object" v1 === 123 // false v2 === 'abc' // false v3 === true // false ``` ä¸é¢ä»£ç ä¸ï¼åºäºåå§ç±»åçå¼ï¼çæäºä¸ä¸ªå¯¹åºçå è£ å¯¹è±¡ãå¯ä»¥çå°ï¼`v1`ã`v2`ã`v3`齿¯å¯¹è±¡ï¼ä¸ä¸å¯¹åºçç®åç±»åå¼ä¸ç¸çã å è£ å¯¹è±¡ç设计ç®çï¼é¦å æ¯ä½¿å¾â对象âè¿ç§ç±»åå¯ä»¥è¦ç JavaScript ææçå¼ï¼æ´é¨è¯è¨æä¸ä¸ªéç¨çæ°æ®æ¨¡åï¼å ¶æ¬¡æ¯ä½¿å¾åå§ç±»åçå¼ä¹æåæ³è°ç¨èªå·±çæ¹æ³ã `Number`ã`String`å`Boolean`è¿ä¸ä¸ªåç对象ï¼å¦æä¸ä½ä¸ºæé 彿°è°ç¨ï¼å³è°ç¨æ¶ä¸å `new`ï¼ï¼èæ¯ä½ä¸ºæ®é彿°è°ç¨ï¼å¸¸å¸¸ç¨äºå°ä»»æç±»åçå¼è½¬ä¸ºæ°å¼ãå符串åå¸å°å¼ã ```javascript // å符串转为æ°å¼ Number('123') // 123 // æ°å¼è½¬ä¸ºå符串 String(123) // "123" // æ°å¼è½¬ä¸ºå¸å°å¼ Boolean(123) // true ``` ä¸é¢è¿ç§æ°æ®ç±»åç转æ¢ï¼è¯¦è§ãæ°æ®ç±»å转æ¢ãä¸èã æ»ç»ä¸ä¸ï¼è¿ä¸ä¸ªå¯¹è±¡ä½ä¸ºæé 彿°ä½¿ç¨ï¼å¸¦æ`new`ï¼æ¶ï¼å¯ä»¥å°åå§ç±»åçå¼è½¬ä¸ºå¯¹è±¡ï¼ä½ä¸ºæ®é彿°ä½¿ç¨æ¶ï¼ä¸å¸¦æ`new`ï¼ï¼å¯ä»¥å°ä»»æç±»åçå¼ï¼è½¬ä¸ºåå§ç±»åçå¼ã ## å®ä¾æ¹æ³ ä¸ç§å è£ å¯¹è±¡åèªæä¾äºè®¸å¤å®ä¾æ¹æ³ï¼è¯¦è§åæãè¿éä»ç»ä¸¤ç§å®ä»¬å ±åå ·æãä»`Object`对象继æ¿çæ¹æ³ï¼`valueOf()`å`toString()`ã ### valueOf() `valueOf()`æ¹æ³è¿åå è£ å¯¹è±¡å®ä¾å¯¹åºçåå§ç±»åçå¼ã ```javascript new Number(123).valueOf() // 123 new String('abc').valueOf() // "abc" new Boolean(true).valueOf() // true ``` ### toString() `toString()`æ¹æ³è¿å对åºçå符串形å¼ã ```javascript new Number(123).toString() // "123" new String('abc').toString() // "abc" new Boolean(true).toString() // "true" ``` ## åå§ç±»åä¸å®ä¾å¯¹è±¡çèªå¨è½¬æ¢ æäºåºåï¼åå§ç±»åçå¼ä¼èªå¨å½ä½å è£ å¯¹è±¡è°ç¨ï¼å³è°ç¨å è£ å¯¹è±¡ç屿§åæ¹æ³ãè¿æ¶ï¼JavaScript 弿ä¼èªå¨å°åå§ç±»åçå¼è½¬ä¸ºå è£ å¯¹è±¡å®ä¾ï¼å¹¶å¨ä½¿ç¨åç«å»éæ¯å®ä¾ã æ¯å¦ï¼å符串å¯ä»¥è°ç¨`length`屿§ï¼è¿åå符串çé¿åº¦ã ```javascript 'abc'.length // 3 ``` ä¸é¢ä»£ç ä¸ï¼`abc`æ¯ä¸ä¸ªåç¬¦ä¸²ï¼æ¬èº«ä¸æ¯å¯¹è±¡ï¼ä¸è½è°ç¨`length`屿§ãJavaScript 弿èªå¨å°å ¶è½¬ä¸ºå è£ å¯¹è±¡ï¼å¨è¿ä¸ªå¯¹è±¡ä¸è°ç¨`length`屿§ãè°ç¨ç»æåï¼è¿ä¸ªä¸´æ¶å¯¹è±¡å°±ä¼è¢«éæ¯ãè¿å°±å«åå§ç±»åä¸å®ä¾å¯¹è±¡çèªå¨è½¬æ¢ã ```javascript var str = 'abc'; str.length // 3 // çåäº var strObj = new String(str) // String { // 0: "a", 1: "b", 2: "c", length: 3, [[PrimitiveValue]]: "abc" // } strObj.length // 3 ``` ä¸é¢ä»£ç ä¸ï¼å符串`abc`çå è£ å¯¹è±¡æä¾äºå¤ä¸ªå±æ§ï¼`length`åªæ¯å ¶ä¸ä¹ä¸ã èªå¨è½¬æ¢çæçå è£ å¯¹è±¡æ¯åªè¯»çï¼æ æ³ä¿®æ¹ãæä»¥ï¼åç¬¦ä¸²æ æ³æ·»å æ°å±æ§ã ```javascript var s = 'Hello World'; s.x = 123; s.x // undefined ``` ä¸é¢ä»£ç 为å符串`s`æ·»å äºä¸ä¸ª`x`屿§ï¼ç»ææ æï¼æ»æ¯è¿å`undefined`ã å¦ä¸æ¹é¢ï¼è°ç¨ç»æåï¼å è£ å¯¹è±¡å®ä¾ä¼èªå¨éæ¯ãè¿æå³çï¼ä¸ä¸æ¬¡è°ç¨å符串ç屿§æ¶ï¼å®é æ¯è°ç¨ä¸ä¸ªæ°çæç对象ï¼è䏿¯ä¸ä¸æ¬¡è°ç¨æ¶çæçé£ä¸ªå¯¹è±¡ï¼æä»¥åä¸å°èµå¼å¨ä¸ä¸ä¸ªå¯¹è±¡ç屿§ã妿è¦ä¸ºå符串添å 屿§ï¼åªæå¨å®çåå对象`String.prototype`ä¸å®ä¹ï¼åè§ãé¢å对象ç¼ç¨ãç« èï¼ã ## èªå®ä¹æ¹æ³ é¤äºåççå®ä¾æ¹æ³ï¼å è£ å¯¹è±¡è¿å¯ä»¥èªå®ä¹æ¹æ³å屿§ï¼ä¾åå§ç±»åçå¼ç´æ¥è°ç¨ã æ¯å¦ï¼æä»¬å¯ä»¥æ°å¢ä¸ä¸ª`double`æ¹æ³ï¼ä½¿å¾åç¬¦ä¸²åæ°åç¿»åã ```javascript String.prototype.double = function () { return this.valueOf() + this.valueOf(); }; 'abc'.double() // abcabc Number.prototype.double = function () { return this.valueOf() + this.valueOf(); }; (123).double() // 246 ``` ä¸é¢ä»£ç å¨`String`å`Number`è¿ä¸¤ä¸ªå¯¹è±¡çååä¸é¢ï¼åå«èªå®ä¹äºä¸ä¸ªæ¹æ³ï¼ä»èå¯ä»¥å¨ææå®ä¾å¯¹è±¡ä¸è°ç¨ã注æï¼æåä¸è¡ç`123`å¤é¢å¿ é¡»è¦å ä¸åæ¬å·ï¼å¦ååé¢çç¹è¿ç®ç¬¦ï¼`.`ï¼ä¼è¢«è§£éæå°æ°ç¹ã