JavaScript æ°æ®ç±»ååæ°æ®ç»æ
ç¼ç¨è¯è¨é½æå ç½®çæ°æ®ç»æï¼ä½åç§ç¼ç¨è¯è¨çæ°æ®ç»æå¸¸æä¸åä¹å¤ãæ¬æå°è¯ååº JavaScript è¯è¨ä¸å ç½®çæ°æ®ç»æåå ¶å±æ§ãå®ä»¬å¯ä»¥ç¨æ¥æå»ºå ¶ä»çæ°æ®ç»æã
è¯è¨æ¦è¿°å¯¹å¸¸è§çæ°æ®ç±»åæä¾äºç±»ä¼¼çæ»ç»ï¼ä½æ¯æ´å¾åäºåå ¶ä»è¯è¨è¿è¡æ¯è¾ã
å¨æç±»åå弱类å
JavaScript æ¯ä¸é¨æçå¨æç±»åç卿è¯è¨ãJavaScript ä¸çåéä¸ä»»ä½ç¹å®å¼ç±»å没æä»»ä½ç´æ¥å ³èï¼ä»»ä½åéé½å¯ä»¥è¢«èµå¼ï¼åè¢«éæ°èµå¼ï¼ä¸ºåç§ç±»åçå¼ï¼
let foo = 42; // foo ç°å¨æ¯æ°å
foo = "bar"; // foo ç°å¨æ¯å符串
foo = true; // foo ç°å¨æ¯å¸å°å¼
JavaScript 乿¯ä¸é¨å¼±ç±»åè¯è¨ï¼è¿æå³çå½è¿ç®æ¶åä¸å¹é çç±»åæ¶ï¼å®å 许éå¼ç±»å转æ¢ï¼è䏿¯æåºç±»åé误ã
const foo = 42; // foo æ¯æ°å
const result = foo + "1"; // JavaScript å° foo 强å¶è½¬æ¢ä¸ºå符串ï¼å æ¤å¯ä»¥å°å
¶ä¸å¦ä¸ä¸ªæä½æ°è¿æ¥èµ·æ¥
console.log(result); // 421
éå¼å¼ºå¶è½¬æ¢æ¯é常æ¹ä¾¿çï¼ä½å½è½¬æ¢å¨ä¸ææåççå°æ¹åçæ¶ï¼æè 䏿æåççæ¹åä¸åæ¶ï¼ä¾å¦ï¼å符串转æ¢ä¸ºæ°åï¼è䏿¯æ°å转æ¢ä¸ºå符串ï¼ï¼å°±ä¼äº§çé¾ä»¥ææ¸çé误ãå¯¹äº symbol å BigIntï¼JavaScript ææç¦æ¢äºæäºéå¼ç±»å转æ¢ã
åå§å¼
é¤äº Object 以å¤ï¼ææçç±»åé½å®ä¹äºä¸å¯åçãå¨è¯è¨æåºå±ç´æ¥è¡¨ç¤ºçå¼ãæä»¬å°è¿äºç±»åçå¼ç§°ä¸ºåå§å¼ã
é¤äº null 以å¤ï¼ææçåå§ç±»åé½å¯ä»¥ä½¿ç¨ typeof è¿ç®ç¬¦è¿è¡æµè¯ãtypeof null è¿å "object"ï¼å æ¤å¿
é¡»ä½¿ç¨ === null æ¥æµè¯ nullã
é¤äº null å undefined 以å¤ï¼ææçåå§ç±»å齿坹åºç对象å
è£
ç±»åï¼å®ä»¬ä¸ºå¤çåå§å¼æä¾äºæç¨çæ¹æ³ãä¾å¦ï¼Number 对象æä¾äºå toExponential() è¿æ ·çæ¹æ³ãå½å¨åå§å¼ä¸è®¿é®å±æ§æ¶ï¼JavaScript ä¼èªå¨å°å¼å
è£
æå¯¹åºçå
è£
对象ï¼å¹¶è®¿é®å¯¹è±¡ä¸ç屿§ãç¶èï¼å¨ null æ undefined ä¸è®¿é®å±æ§æ¶ï¼ä¼æåº TypeError å¼å¸¸ï¼è¿éè¦ä½¿ç¨å¯éé¾è¿ç®ç¬¦ã
| ç±»å | typeof è¿åå¼ |
对象å è£ å¨ |
|---|---|---|
| Null | "object" |
ä¸éç¨ |
| Undefined | "undefined" |
ä¸éç¨ |
| Boolean | "boolean" |
Boolean |
| Number | "number" |
Number |
| BigInt | "bigint" |
BigInt |
| String | "string" |
String |
| Symbol | "symbol" |
Symbol |
对象å è£ å¨ç±»çåè页é¢å 嫿¯ä¸ªç±»åå¯ç¨çæ¹æ³å屿§çæ´å¤ä¿¡æ¯ï¼ä»¥ååå§ç±»åèªèº«è¯ä¹çè¯¦ç»æè¿°ã
Null ç±»å
Null ç±»ååªæä¸ä¸ªå¼ï¼nullã
Undefined ç±»å
Undefined ç±»ååªæä¸ä¸ªå¼ï¼undefinedã
仿¦å¿µä¸è®²ï¼undefined 表示å¼ç¼ºå¤±ï¼null 表示对象缺失ï¼è¿ä¹è§£éäº typeof null === "object"ï¼ã彿äºä¸è¥¿æ²¡æå¼æ¶ï¼JavaScript è¯è¨é常é»è®¤ä¸º undefinedï¼
- 没æå¼ç
returnè¯å¥ï¼return;ï¼ï¼éå¼è¿åundefinedã - 访é®ä¸åå¨çå¯¹è±¡å±æ§ï¼
obj.iDontExistï¼ï¼è¿åundefinedã - åéå£°ææ¶æ²¡æåå§åï¼
let x;ï¼ï¼éå¼åå§å为undefinedã - 许å¤å
Array.prototype.find()åMap.prototype.get()çæ¹æ³ï¼å½æ²¡ææ¾å°å ç´ æ¶ï¼è¿åundefinedã
null 卿 ¸å¿è¯è¨ä¸ä½¿ç¨é¢çå°å¾å¤ãæéè¦çå°æ¹æ¯ååé¾çæ«ç«¯ï¼å
¶æ¬¡æ¯ä¸åå交äºçæ¹æ³ï¼å¦ Object.getPrototypeOf()ãObject.create() çï¼æ¥åæè¿å null è䏿¯ undefinedã
null æ¯ä¸ä¸ªå
³é®åï¼ä½ undefined æ¯ä¸ä¸ªæ®éçæ è¯ç¬¦ï¼è¿ä¸ªæ è¯ç¬¦æ°å¥½æ¯ä¸ä¸ªå
¨å±å±æ§ãå®é
ä¸åºå«å¾å°ï¼å 为 undefined ä¸åºè¯¥è¢«éæ°å®ä¹æè
é®è½ã
Boolean ç±»å
Boolean ç±»å表示ä¸ä¸ªé»è¾å®ä½å¹¶ä¸å
æ¬ä¸¤ä¸ªå¼ï¼true å falseã
å¸å°å¼é常ç¨äºæ¡ä»¶è¿ç®ï¼å
æ¬ä¸å
è¿ç®ç¬¦ãif...elseãwhile çã
Number ç±»å
Number ç±»åæ¯ä¸ç§åºäº IEEE 754 æ åçå精度 64 ä½äºè¿å¶æ ¼å¼çå¼ãå®è½å¤åå¨ 2-1074ï¼Number.MIN_VALUEï¼å 21023 à (2 - 2-52)ï¼Number.MAX_VALUEï¼ä¹é´çæ£æµ®ç¹æ°ï¼ä»¥åç¸åèå´çè´æµ®ç¹æ°ï¼ä½æ¯å®ä»
è½å®å
¨å°åå¨å¨ -(253 â 1)ï¼Number.MIN_SAFE_INTEGERï¼å° 253 â 1ï¼Number.MAX_SAFE_INTEGERï¼èå´å
çæ´æ°ãè¶
åºè¿ä¸ªèå´ï¼JavaScript å°ä¸è½å®å
¨å°è¡¨ç¤ºæ´æ°ï¼ç¸åï¼å®ä»¬å°ç±å精度浮ç¹è¿ä¼¼å¼è¡¨ç¤ºãä½ å¯ä»¥ä½¿ç¨ Number.isSafeInteger() æ£æ¥ä¸ä¸ªæ°æ¯å¦å¨å®å
¨çæ´æ°èå´å
ã
è¶ åºè¡¨ç¤ºèå´çå¼ä¼èªå¨è½¬æ¢ï¼
- 大äº
Number.MAX_VALUEçæ£å¼è¢«è½¬æ¢ä¸º+Infinityã - å°äº
Number.MIN_VALUEçæ£å¼è¢«è½¬æ¢ä¸º+0ã - å°äº -
Number.MAX_VALUEçè´å¼è¢«è½¬æ¢ä¸º-Infinityã - å¤§äº -
Number.MIN_VALUEçè´å¼è¢«è½¬æ¢ä¸º-0ã
+Infinity å -Infinity è¡ä¸ºç±»ä¼¼äºæ°å¦ä¸çæ 穷大ï¼ä½æ¯æä¸äºç»å¾®çåºå«ï¼æ´å¤ç»èï¼åè§ Number.POSITIVE_INFINITY å Number.NEGATIVE_INFINITYã
Number ç±»åä»
æä¸ä¸ªå
·æå¤ä¸ªè¡¨ç°å½¢å¼çå¼ï¼-0 å +0 é½è¡¨ç¤º 0ï¼å
¶ä¸ 0 æ¯ +0 çå«åï¼ãå®é
ä¸ï¼è¿ä¸¤è
ä¹é´å 乿²¡æåºå«ï¼ä¾å¦ï¼+0 === -0 æ¯ trueãç¶èï¼å½ä½ é¤ä»¥ 0 çæ¶åï¼ä½ 伿³¨æå°åºå«ï¼
console.log(42 / +0); // Infinity
console.log(42 / -0); // -Infinity
NaNï¼âNot a Numberâï¼æ¯ä¸ä¸ªç¹æ®ç§ç±»çæ°åå¼ï¼å½ç®æ¯è¿ç®çç»æä¸è½è¡¨ç¤ºä¸ºæ°åæ¶ï¼é常ä¼éå°å®ãå®ä¹æ¯ JavaScript ä¸å¯ä¸ä¸çäºèªèº«çå¼ã
è½ç¶ number 卿¦å¿µä¸æ¯ä¸ä¸ªâæ°å¦çå¼âï¼å¹¶ä¸æ»æ¯éå¼çç¼ç 为浮ç¹ç±»åï¼ä½æ¯ JavaScript æä¾äºä½è¿ç®ç¬¦ãå½åºç¨ä½è¿ç®ç¬¦æ¶ï¼number é¦å 转æ¢ä¸º 32 使´æ°ã
夿³¨ï¼å°½ç®¡ä½è¿ç®ç¬¦å¯ä»¥ä½¿ç¨ä½æ©ç æ¥è¡¨ç¤ºå个æ°åä¸çå 个å¸å°å¼ï¼ä½è¿é叏䏿¯æä½³å®è·µãJavaScript æä¾äºè¡¨ç¤ºä¸ç»å¸å°å¼çå ¶ä»æ¹æ³ï¼å¦å¸å°æ°ç»ï¼æå°å¸å°å¼èµå¼ç»å ·å屿§ç对象ï¼ã使©ç ä¹å¾å¾è®©ä»£ç æ´é¾é 读ãçè§£åç»´æ¤ã
å¨é常åéçç¯å¢ä¸ä½¿ç¨æ¤ç±»ææ¯å¯è½å¾å¿ è¦ï¼ä¾å¦å¨è¯å¾åºå¯¹æ¬å°åå¨çéå¶æ¶ï¼æå¨æç«¯æ åµä¸ï¼ä¾å¦å½ç½ç»ä¸çæ¯ä¸ªä½è®¡æ°æ¶ï¼ãåªæå½å®æ¯æåçä¼å大å°çæªæ½æ¶ï¼æåºèèè¿é¡¹ææ¯ã
BigInt ç±»å
BigInt ç±»åæ¯ JavaScript ä¸çæ°ååå§ç±»åï¼å®å¯ä»¥è¡¨ç¤ºä»»æå¤§å°çæ´æ°ãä½¿ç¨ BigIntï¼ä½ å¯ä»¥å®å
¨å°åå¨åæä½å·¨å¤§çæ´æ°ï¼å³ä¾¿æ¯è¶
è¿ Number çå®å
¨æ´æ°éå¶ï¼Number.MAX_SAFE_INTEGERï¼ã
BigInt éè¿å¨æ´æ°æ«å°¾æ·»å n æè°ç¨ BigInt() 彿°å建ã
æ¬ä¾æ¼ç¤ºäºéå¢ Number.MAX_SAFE_INTEGER ä¼è¿å颿çç»æï¼
// BigInt
const x = BigInt(Number.MAX_SAFE_INTEGER); // 9007199254740991n
x + 1n === x + 2n; // falseï¼å 为 9007199254740992n å 9007199254740993n ä¸ç¸ç
// Number
Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2; // trueï¼å 为é½çäº 9007199254740992
ä½ å¯ä»¥ä½¿ç¨å¤§å¤æ°è¿ç®ç¬¦å¤ç BigIntï¼å
æ¬ +ã*ã-ã** å %ââå¯ä¸è¢«ç¦æ¢çæ¯ >>>ãBigInt 并䏿¯ä¸¥æ ¼çäºæçç¸åæ°å¦å¼ç Numberï¼èæ¯éä¸¥æ ¼ç¸çã
BigInt å¼å number å¼ç¸æ¯ï¼ä¸æ»æ¯æ´ç²¾ç¡®ï¼ä¹ä¸æ»æ¯æ´ä¸ç²¾ç¡®ï¼å 为 BigInt ä¸è½è¡¨ç¤ºå°æ°ï¼ä½è½æ´ç²¾ç¡®å°è¡¨ç¤ºå¤§æ´æ°ãè¿ä¸¤ç§ç±»åé½ä¸è½ç¸äºæ¿ä»£ã妿å¨ç®æ¯è¡¨è¾¾å¼ä¸å° BigInt å¼åå¸¸è§ number 弿··åï¼æè
å®ä»¬ç¸äºéå¼è½¬æ¢ï¼åæåº TypeErrorã
String ç±»å
String ç±»åè¡¨ç¤ºææ¬æ°æ®å¹¶ç¼ç 为 UTF-16 ç å
ç 16 使 ç¬¦å·æ´æ°å¼åºåãå符串ä¸çæ¯ä¸ªå
ç´ å¨å符串ä¸å æ®ä¸ä¸ªä½ç½®ã第ä¸ä¸ªå
ç´ çç´¢å¼ä¸º 0ï¼ä¸ä¸ä¸ªçç´¢å¼ä¸º 1ï¼ä¾æ¤ç±»æ¨ãå符串çé¿åº¦æ¯å
¶ä¸ç UTF-16 ç å
çæ°éï¼è¿å¯è½ä¸ Unicode å符çå®é
æ°éä¸ç¬¦ï¼æ´å¤ç»èåè§ String åè页é¢ã
JavaScript å符串æ¯ä¸å¯åçãè¿æå³ç䏿¦å符串被å建ï¼å°±ä¸å¯è½ä¿®æ¹å®ãåç¬¦ä¸²æ¹æ³ä¼åºäºå½åå符串çå 容å建ä¸ä¸ªæ°çå符串ââä¾å¦ï¼
- 使ç¨
substring()è·ååå§å符串çåå符串ã - 使ç¨ä¸²èè¿ç®ç¬¦ï¼
+ï¼æconcat()å°ä¸¤ä¸ªå符串串èã
注æä»£ç ä¸çâå符串类åâï¼
使ç¨å符串æ¥è¡¨ç¤ºå¤æçæ°æ®å¯è½å¾è¯±äººãè¿æ ·åä¼å¸¦æ¥çæç好å¤ï¼
- éè¿åç¬¦ä¸²æ¼æ¥æé 夿çå符串å¾å®¹æã
- å符串容æè°è¯ï¼ä½ çå°çæå°å 容å§ç»æ¯å符串ä¸çå 容ï¼ã
- å符串æ¯è®¸å¤ API çå¸¸è§æ åï¼input åæ®µãlocal storage ä¸çå¼ï¼ä»¥å
fetch()使ç¨Response.text()æ¶çååºï¼ççï¼èä¸è¿äº API å¯è½åªè½ä¸å符串ä¸å使ç¨ã
æç §å¸¸è§ï¼ç¨åç¬¦ä¸²è¡¨ç¤ºä»»ä½æ°æ®ç»ææ¯å¯è½çãä½è¿å¹¶ä¸æ»æ¯ä¸ä¸ªå¥½ä¸»æãä¾å¦ï¼ä½¿ç¨ä¸ä¸ªåé符ï¼å¯ä»¥æ¨¡æä¸ä¸ªå表ï¼ç¶è JavaScript æ°ç»æ´éåï¼ãä¸å¹¸çæ¯ï¼å½åéç¬¦æ¯æä¸ªâå表âå ç´ æ¶ï¼å表就éå°ç ´åãè¿æ¶å¯ä»¥éæ©è½¬ä¹å符ï¼ççãææè¿äºé½éè¦çº¦å®ï¼å¹¶é æä¸å¿ è¦çç»´æ¤è´æ ã
è¡¨ç¤ºææ¬æ°æ®æ¶æ¨è使ç¨å符串ãå½éè¦è¡¨ç¤ºå¤æçæ°æ®æ¶ï¼ä½¿ç¨å符串解æå¹¶ä½¿ç¨éå½çæ½è±¡ã
Symbol ç±»å
Symbol æ¯ä¸ç§å¯ä¸å¹¶ä¸ä¸å¯åçåå§å¼ï¼å¹¶ä¸å¯ä»¥ç¨ä½å¯¹è±¡å±æ§çé®ï¼å¦ä¸ï¼ã卿äºç¨åºè¯è¨ä¸ï¼Symbol ä¹è¢«ç§°ä½âååâãsymbol çç®çæ¯å建å¯ä¸ç屿§é®ï¼ä¿è¯ä¸ä¼ä¸å
¶ä»ä»£ç ä¸çé®äº§çå²çªã
Object
å¨è®¡ç®æºç§å¦ä¸ï¼å¯¹è±¡æ¯æå åä¸çå¼ï¼è¿åå åå¯è½è¢«æ è¯ç¬¦å¼ç¨ãå¨ JavaScript ä¸ï¼å¯¹è±¡æ¯å¯ä¸å¯åçå¼ãäºå®ä¸ï¼å½æ°ä¹æ¯å ·æå¯è°ç¨è¿ä¸ªé¢å¤è½åç对象ã
屿§
å¨ JavaScript ä¸ï¼å¯¹è±¡å¯ä»¥è¢«ç使¯ä¸ä¸ªå±æ§çéåãç¨å¯¹è±¡åé¢éè¯æ³ä¼åå§åä¸ç»æéç屿§ï¼ç¶åï¼å¯ä»¥æ·»å åç§»é¤å±æ§ãå¯¹è±¡å±æ§çä»·äºé®å¼å¯¹ã屿§é®è¦ä¹æ¯å符串ï¼è¦ä¹æ¯ symbolãå½å ¶ä»ç±»åï¼å¦æ°åï¼ç¨äºç´¢å¼å¯¹è±¡æ¶ï¼å¼ä¼éå¼å°è½¬å为å符串ã屿§å¼å¯ä»¥æ¯ä»»ä½ç±»åçå¼ï¼å æ¬å ¶ä»å¯¹è±¡ï¼ä»èå¯ä»¥æå»ºå¤æçæ°æ®ç»æã
æä¸¤ç§ç±»åçå¯¹è±¡å±æ§ï¼æ°æ®å±æ§å访é®å¨å±æ§ãæ¯ä¸ªå±æ§é½æå¯¹åºçç¹æ§ãæ¯ä¸ªç¹æ§ç± JavaScript 弿è¿è¡å
é¨è®¿é®ï¼ä½æ¯ä½ å¯ä»¥éè¿ Object.defineProperty() 设置å®ä»¬ï¼æéè¿ Object.getOwnPropertyDescriptor() 读åå®ä»¬ãä½ å¯ä»¥å¨ Object.defineProperty() 页é¢é
读æ´å¤æå
³åç§ç»å¾®å·®å«çä¿¡æ¯ã
æ°æ®å±æ§
æ°æ®å±æ§å°é®ä¸å¼ç¸å ³èãå®å¯ä»¥ç±ä»¥ä¸ç¹æ§æè¿°ï¼
value-
éè¿å±æ§ç get 访é®è·åå¼ãå¯ä»¥æ¯ä»»æç JavaScript å¼ã
writable-
å¸å°å¼ï¼è¡¨ç¤ºå±æ§æ¯å¦å¯ä»¥éè¿èµå¼è¿è¡ä¿®æ¹ã
enumerable-
å¸å°å¼ï¼è¡¨ç¤ºå±æ§æ¯å¦å¯ä»¥éè¿
for...in循ç¯è¿è¡æä¸¾ãå¦è¯·åé 屿§ç坿䏾æ§åæææï¼ä»¥äºè§£æä¸¾æ§å¦ä½ä¸å ¶ä»å½æ°åè¯æ³äº¤äºã configurable-
å¸å°å¼ï¼è¡¨ç¤ºå±æ§æ¯å¦å¯ä»¥å é¤ï¼æ¯å¦å¯ä»¥æ´æ¹ä¸ºè®¿é®å¨å±æ§ï¼ä»¥åæ¯å¦å¯ä»¥æ´æ¹å ¶ç¹æ§ã
访é®å¨å±æ§
å°é®ä¸ä¸¤ä¸ªè®¿é®å¨å½æ°ï¼get å setï¼ç¸å
³èï¼ä»¥è·åæè
åå¨å¼ã
夿³¨ï¼éè¦çæ¯ï¼æè¯å°å®æ¯è®¿é®å¨å±æ§ââè䏿¯è®¿é®å¨æ¹æ³ãæä»¬å¯ä»¥å°å½æ°ä½ä¸ºå¼ç»ä¸ä¸ª JavaScript 对象æä¾è¿ä¼¼äºç±»ç访é®å¨ââä½è¿å¹¶ä¸è½ä½¿è¯¥å¯¹è±¡æä¸ºç±»ã
访é®å¨å±æ§æä»¥ä¸ç¹æ§ï¼
get-
彿§è¡å¼ç get è®¿é®æ¶ï¼ä½¿ç¨ä¸ä¸ªç©ºçåæ°å表è°ç¨å½æ°è·å屿§å¼ãåè§ getterãå¯è½æ¯
undefinedã set-
使ç¨å å«èµäºçå¼çåæ°è°ç¨å½æ°ãæ¯å½å°è¯æ´æ¹æå®å±æ§æ¶æ§è¡ãåè§ setterãå¯è½æ¯
undefinedã enumerable-
å¸å°å¼ï¼è¡¨ç¤ºå±æ§æ¯å¦å¯ä»¥éè¿
for...in循ç¯è¿è¡æä¸¾ãå¦è¯·åé 屿§ç坿䏾æ§åæææï¼ä»¥äºè§£æä¸¾æ§å¦ä½ä¸å ¶ä»å½æ°åè¯æ³äº¤äºã configurable-
å¸å°å¼ï¼è¡¨ç¤ºå±æ§æ¯å¦å¯ä»¥å é¤ï¼æ¯å¦å¯ä»¥æ´æ¹ä¸ºè®¿é®å¨å±æ§ï¼ä»¥åæ¯å¦å¯ä»¥æ´æ¹å ¶ç¹æ§ã
对象çååæåå¦ä¸ä¸ªå¯¹è±¡æè
nullââ仿¦å¿µä¸è®²ï¼å®æ¯å¯¹è±¡çéè屿§ï¼é常表示为 [[Prototype]]ã对象ç [[Prototype]] ç屿§ä¹å¯ä»¥å¨å¯¹è±¡èªèº«ä¸è®¿é®ã
对象æ¯ä¸´æ¶çé®å¼å¯¹ï¼å æ¤ç»å¸¸è¢«ç¨ä½ mapãä¸è¿ï¼è¿å¯è½åå¨äººä½å·¥ç¨å¦ãå®å
¨æ§åæ§è½æ¹é¢çé®é¢ãè¯·ä½¿ç¨ Map åå¨ä»»æçæ°æ®ãMap åèå¯¹ä½¿ç¨æ®é对象åä½¿ç¨ map åå¨é®å¼ä¹é´çå©å¼è¿è¡äºæ´è¯¦ç»ç讨论ã
Date
å½è¡¨ç¤ºæ¥ææ¶ï¼æå¥½çéæ©æ¯ä½¿ç¨ JavaScript ä¸å
ç½®ç Date å·¥å
፱ȋ
ç´¢å¼ç±»éåï¼æ°ç»åç±»ååæ°ç»
æ°ç»æ¯æ´æ°é®ç屿§å length 屿§ä¹é´æçç¹æ®å
³ç³»ç常è§å¯¹è±¡ã
æ¤å¤ï¼æ°ç»ç»§æ¿äº Array.prototype çä¸ç»æä½æ°ç»çä¾¿æ·æ¹æ³ãä¾å¦ï¼indexOf()ï¼æç´¢æ°ç»ä¸çä¸ä¸ªå¼ï¼æ push()ï¼åæ°ç»è¿½å ä¸ä¸ªå
ç´ ï¼ï¼ççãè¿ä½¿å¾æ°ç»æä¸ºè¡¨ç¤ºæåºå表ççæ³éæ©ã
ç±»ååæ°ç»è¡¨ç¤ºåºå±äºè¿å¶ç¼å²åºçç±»æ°ç»è§å¾ï¼å¹¶ä¸æä¾äºä¸æ°ç»ç¸å¯¹åºç类似è¯ä¹çæ¹æ³ãâç±»ååæ°ç»âæ¯ä¸ç³»åæ°æ®ç»æçæ»è¯æ¯è¯ï¼å
æ¬ Int8ArrayãFloat32Array ççãè·åæ´å¤ç»èï¼è¯·æ¥çç±»ååæ°ç»é¡µãç±»ååæ°ç»éå¸¸ä¸ ArrayBuffer å DataView ä¸èµ·ä½¿ç¨ã
带é®çéåï¼MapãSetãWeakMapãWeakSet
è¿äºæ°æ®ç»ææå¯¹è±¡çå¼ç¨å½ä½é®ãSet å WeakSet 表示å¯ä¸å¼çéåï¼è Map å WeakMap 表示é®å¼ç¸å
³èçéåã
ä½ ä¹å¯ä»¥èªå·±å®ç° Map å Setãç¶èï¼å 为对象ä¸è½æ¯è¾ï¼ä¾å¦ï¼å¨ <âå°äºâçæä¹ä¸ï¼ï¼å¦ä¸æ¹é¢ï¼å¼æä¹æ²¡ææ´é²å¯¹è±¡çæ£å彿°ï¼å æ¤æ¥æ¾æ§è½å¿
宿¯çº¿æ§çãå®ä»¬çåçå®ç°ï¼å
æ¬ WeakMapï¼æçè¿ä¼¼å¯¹æ°å°å¸¸æ°æ¶é´çæ¥æ¾æ§è½ã
é常ï¼è¦å°æ°æ®ç»å®å° DOM èç¹ï¼å¯ä»¥ç´æ¥å¨å¯¹è±¡ä¸è®¾ç½®å±æ§ï¼æä½¿ç¨ data-* 屿§ãè¿æ ·åçç¼ºç¹æ¯ï¼å¨åä¸ä¸ä¸æä¸è¿è¡çä»»ä½èæ¬é½å¯ä»¥ä½¿ç¨è¿äºæ°æ®ãè Map å WeakMap åå¯ä»¥è½»æ¾å°å°æ°æ®éè½å°ç»å®å°å¯¹è±¡ä¸ã
WeakMap å WeakSet åªå
许å°å¯åå¾åæ¶çå¼ä½ä¸ºé®ï¼è¿äºé®è¦ä¹æ¯å¯¹è±¡ï¼è¦ä¹æ¯æªæ³¨åç symbolï¼å³ä½¿é®ä»å¨éåä¸ï¼ä¹å¯è½è¢«åæ¶ãå®ä»¬ä¸é¨ç¨äºä¼åå
å使ç¨ã
ç»æåæ°æ®ï¼JSON
JSONï¼JavaScript Object Notationï¼æ¯ä¸ç§è½»éçº§çæ°æ®äº¤æ¢æ ¼å¼ï¼æ¥æºäº JavaScriptï¼åæ¶ä¹è¢«å¤ç§è¯è¨æä½¿ç¨ãJSON æå»ºäºéç¨çæ°æ®ç»æï¼å¯ä»¥å¨ä¸åç¯å¢ä¹é´ä¼ è¾ï¼çè³å¯ä»¥è·¨è¯è¨ä¼ è¾ãæ´å¤ç»èï¼è¯·åè§ JSONã
æ ååºä¸çæ´å¤å¯¹è±¡
JavaScript æä¸ä¸ªå ç½®å¯¹è±¡çæ ååºã请é 读åèäºè§£æå ³å ç½®å¯¹è±¡çæ´å¤ä¿¡æ¯ã
强å¶ç±»å转æ¢
å¦ä¸æè¿°ï¼JavaScript æ¯ä¸é¨å¼±ç±»åè¯è¨ãè¿æå³çä½ å¯ä»¥ç»å¸¸ä½¿ç¨ä¸é¢æç±»åä¸åçç±»åçå¼ï¼JavaScript è¯è¨å°ä¸ºä½ æå®è½¬æ¢ä¸ºæ£ç¡®çç±»åã为æ¤ï¼JavaScript å®ä¹äºä¸äºå¼ºå¶è½¬æ¢è§åã
åå§å¼å¼ºå¶è½¬æ¢
åå§å¼å¼ºå¶è½¬æ¢è¿ç¨ç¨äºå¾å°ææçåå§å¼ï¼ä½å¯¹å®é çç±»ååºè¯¥æ¯ä»ä¹å¹¶æ²¡æå¼ºççå好ãé常æ åµä¸å¯ä»¥æ¥å stringãnumber æ BigIntãä¾å¦ï¼
Date()æé 彿°ï¼å½å®æ¶å°ä¸ä¸ªä¸æ¯Dateå®ä¾çåæ°æ¶ââåç¬¦ä¸²è¡¨ç¤ºæ¥æå符串ï¼è number 表示æ¶é´æ³ã+è¿ç®ç¬¦ââ妿æä¸ªæä½æ°æ¯åç¬¦ä¸²ï¼æ§è¡å符串串èï¼å¦åï¼æ§è¡æ°åç¸å ã==è¿ç®ç¬¦ââ妿æä¸ªæä½æ°æ¯åå§å¼ï¼èå¦ä¸ä¸ªæä½æ°æ¯å¯¹è±¡ï¼objectï¼ï¼å该对象å°è½¬æ¢ä¸ºæ²¡æé¦éç±»åçåå§å¼ã
妿å¼å·²ç»æ¯åå§å¼ï¼åæ¤æä½ä¸ä¼è¿è¡ä»»ä½è½¬æ¢ã对象å°ä¾æ¬¡è°ç¨å®ç [Symbol.toPrimitive]()ï¼å° default ä½ä¸º hint å¼ï¼ãvalueOf() å toString() æ¹æ³ï¼å°å
¶è½¬æ¢ä¸ºåå§å¼ã注æï¼åå§å¼è½¬æ¢ä¼å¨ toString() æ¹æ³ä¹åè°ç¨ valueOf() æ¹æ³ï¼è¿ä¸ number 强å¶è½¬æ¢çè¡ä¸ºç¸ä¼¼ï¼ä½ä¸å符串强å¶è½¬æ¢ä¸åã
[Symbol.toPrimitive]() æ¹æ³ï¼å¦æåå¨ï¼åå¿
é¡»è¿ååå§å¼ââè¿å对象ï¼ä¼å¯¼è´ TypeErrorãå¯¹äº valueOf() å toString()ï¼å¦æå
¶ä¸ä¸ä¸ªè¿å对象ï¼å忽ç¥å
¶è¿åå¼ï¼ä»è使ç¨å¦ä¸ä¸ªçè¿åå¼ï¼å¦æä¸¤è
é½ä¸åå¨ï¼æè
两è
齿²¡æè¿ååå§å¼ï¼åæåº TypeErrorãä¾å¦ï¼å¨ä¸é¢ç代ç ä¸ï¼
console.log({} + []); // "[object Object]"
{} å [] 齿²¡æ [Symbol.toPrimitive]() æ¹æ³ã{} å [] é½ä» Object.prototype.valueOf ç»§æ¿ valueOf()ï¼å
¶è¿å对象èªèº«ãå 为è¿å弿¯å¯¹è±¡ï¼æä»¥å®è¢«å¿½ç¥ãå æ¤ï¼è°ç¨ toString() æ¹æ³ã{}.toString() è¿å "[object Object]"ï¼è [].toString() è¿å ""ï¼å æ¤è¿ä¸ªç»ææ¯å®ä»¬ç串èï¼"[object Object]"ã
å¨å¼ºå¶è½¬æ¢ä¸ºä»»æçåå§ç±»åæ¶ï¼[Symbol.toPrimitive]() æ¹æ³æ»æ¯ä¼å
è°ç¨ãåå§å¼å¼ºå¶è½¬æ¢çè¡ä¸ºéå¸¸ä¸ number 强å¶è½¬æ¢ç±»ä¼¼ï¼å 为ä¼å
è°ç¨äº valueOf()ï¼ç¶èï¼æçèªå®ä¹ [Symbol.toPrimitive]() æ¹æ³ç对象å¯ä»¥éæ©è¿åä»»æçåå§å¼ãDate å Symbol 对象æ¯å¯ä¸éå [Symbol.toPrimitive]() æ¹æ³ç对象ãDate.prototype[Symbol.toPrimitive]() å° "string" è§ä¸º "default" hintï¼è Symbol.prototype[Symbol.toPrimitive]() å¿½ç¥ hint å¹¶å§ç»è¿åä¸ä¸ª symbolã
æ°åç±»å强å¶è½¬æ¢
æä¸¤ç§æ°åç±»åï¼Number å BigIntãææ¶åï¼JavaScript è¯è¨ææä½¿ç¨ number æ BigIntï¼ä¾å¦ Array.prototype.slice()ï¼å
¶ä¸ç´¢å¼å¿
é¡»æ¯ numberï¼ï¼å
¶ä»æ¶åï¼å®å¯è½å®¹å¿å¹¶ä¸æ ¹æ®æä½æ°çç±»åæ§è¡ä¸åçè¿ç®ãæå
³ä¸å
许ä»å
¶ä»ç±»åéå¼è½¬æ¢çä¸¥æ ¼å¼ºå¶è½¬æ¢è¿ç¨ï¼è¯·åé
number 强å¶è½¬æ¢å BigInt 强å¶è½¬æ¢ã
æ°åç±»å强å¶è½¬æ¢ä¸ number 强å¶è½¬æ¢å ä¹ç¸åï¼åªæ¯ BigInt ä¼æåæ ·è¿åï¼è䏿¯å¼èµ· TypeErrorãå¼ºå¶æ°åç±»å转æ¢ç¨äºææç®æ¯è¿ç®ï¼å 为å®ä»¬éè½½äº number å BigInt ç±»åãå¯ä¸ä¾å¤çæ¯ä¸å
å ï¼å®æ»æ¯å®æ½ number 强å¶è½¬æ¢ã
å ¶ä»ç±»å强å¶è½¬æ¢
é¤äº NullãUndefined 以å Symbol ç±»å以å¤ï¼ææçæ°æ®ç±»å齿å®ä»¬åèªç强å¶è½¬æ¢è¿ç¨ãæ´å¤ç»èï¼è¯·åè§å符串强å¶è½¬æ¢ãå¸å°å¼å¼ºå¶è½¬æ¢ä»¥å对象强å¶è½¬æ¢ã
ä½ å¯è½å·²ç»æ³¨æå°ï¼æä¸ç§ä¸åçè·¯å¾å¯ä»¥å°å¯¹è±¡è½¬æ¢ä¸ºåå§å¼ï¼
- åå§å¼å¼ºå¶è½¬æ¢ï¼
[Symbol.toPrimitive]("default")âvalueOf()âtoString() - æ°åç±»å强å¶è½¬æ¢ãnumber 强å¶è½¬æ¢ãBigInt 强å¶è½¬æ¢ï¼
[Symbol.toPrimitive]("number")âvalueOf()âtoString() - å符串强å¶è½¬æ¢ï¼
[Symbol.toPrimitive]("string")âtoString()âvalueOf()
卿ææ
åµä¸ï¼[Symbol.toPrimitive]() 妿åå¨ï¼å¿
é¡»å¯è°ç¨å¹¶è¿ååå§å¼ï¼è妿 valueOf æ toString ä¸å¯è°ç¨æè¿å对象ï¼å®ä»¬å°è¢«å¿½ç¥ãå¨è¿ç¨ç»ææ¶ï¼å¦ææåï¼ç»æä¿è¯æ¯åå§å¼ãç¶åï¼ç±æ¤äº§ççåå§å¼ä¼æ ¹æ®ä¸ä¸æè¿ä¸æ¥çè¿è¡å¼ºå¶ç±»å转æ¢ã
åè§
- JavaScript æ°æ®ç»æåç®æ³ï¼ç± Oleksii Trekhleb æ°å
- JavaScript ä¸çè®¡ç®æºç§å¦ï¼ç± Nicholas C. Zakas æ°å