cainiaoblog 23.2.171

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (401) hide show
  1. package/CNAME +1 -0
  2. package/MP_verify_o6dHCK5mIkxNpzvZ.txt +1 -0
  3. package/README.md +8 -0
  4. package/about/index.html +54 -0
  5. package/ads.txt +1 -0
  6. package/app/manual.html +104 -0
  7. package/appConfigs/config +1 -0
  8. package/archives/2018/index.html +48 -0
  9. package/archives/2019/index.html +48 -0
  10. package/archives/2019/page/2/index.html +48 -0
  11. package/archives/2020/index.html +48 -0
  12. package/archives/2021/index.html +48 -0
  13. package/archives/2022/index.html +48 -0
  14. package/archives/2023/index.html +48 -0
  15. package/archives/index.html +48 -0
  16. package/archives/page/2/index.html +48 -0
  17. package/archives/page/3/index.html +48 -0
  18. package/article/10047.html +148 -0
  19. package/article/10164.html +64 -0
  20. package/article/10624.html +436 -0
  21. package/article/10745.html +586 -0
  22. package/article/11674.html +71 -0
  23. package/article/11939.html +72 -0
  24. package/article/12238.html +86 -0
  25. package/article/1230.html +533 -0
  26. package/article/13265.html +69 -0
  27. package/article/13823.html +78 -0
  28. package/article/14125.html +72 -0
  29. package/article/14192.html +561 -0
  30. package/article/14375.html +85 -0
  31. package/article/14744.html +83 -0
  32. package/article/14936.html +451 -0
  33. package/article/1518.html +250 -0
  34. package/article/15428.html +71 -0
  35. package/article/15518.html +288 -0
  36. package/article/15569.html +418 -0
  37. package/article/1566.html +122 -0
  38. package/article/16017.html +156 -0
  39. package/article/16947.html +440 -0
  40. package/article/17096.html +82 -0
  41. package/article/17246.html +89 -0
  42. package/article/17575.html +350 -0
  43. package/article/179.html +757 -0
  44. package/article/18039.html +233 -0
  45. package/article/18071.html +375 -0
  46. package/article/18142.html +71 -0
  47. package/article/19909.html +160 -0
  48. package/article/20014.html +89 -0
  49. package/article/20021.html +389 -0
  50. package/article/20037.html +280 -0
  51. package/article/20056.html +95 -0
  52. package/article/20093.html +404 -0
  53. package/article/2021.html +607 -0
  54. package/article/20459.html +115 -0
  55. package/article/20613.html +263 -0
  56. package/article/20635.html +71 -0
  57. package/article/21317.html +71 -0
  58. package/article/21320.html +90 -0
  59. package/article/21782.html +548 -0
  60. package/article/22230.html +435 -0
  61. package/article/22237.html +347 -0
  62. package/article/22398.html +109 -0
  63. package/article/22422.html +270 -0
  64. package/article/22565.html +300 -0
  65. package/article/23046.html +250 -0
  66. package/article/23083.html +215 -0
  67. package/article/23195.html +297 -0
  68. package/article/23301.html +835 -0
  69. package/article/23589.html +285 -0
  70. package/article/23655.html +338 -0
  71. package/article/23864.html +76 -0
  72. package/article/23914.html +96 -0
  73. package/article/24169.html +135 -0
  74. package/article/24581.html +349 -0
  75. package/article/2475.html +500 -0
  76. package/article/24826.html +77 -0
  77. package/article/24924.html +247 -0
  78. package/article/25164.html +1495 -0
  79. package/article/25318.html +394 -0
  80. package/article/25710.html +1129 -0
  81. package/article/25734.html +83 -0
  82. package/article/26083.html +174 -0
  83. package/article/26147.html +283 -0
  84. package/article/26291.html +110 -0
  85. package/article/26354.html +71 -0
  86. package/article/26624.html +145 -0
  87. package/article/26639.html +298 -0
  88. package/article/26850.html +138 -0
  89. package/article/26940.html +258 -0
  90. package/article/27796.html +190 -0
  91. package/article/27800.html +161 -0
  92. package/article/28963.html +159 -0
  93. package/article/28976.html +247 -0
  94. package/article/29042.html +72 -0
  95. package/article/29596.html +81 -0
  96. package/article/29619.html +183 -0
  97. package/article/29623.html +329 -0
  98. package/article/29829.html +205 -0
  99. package/article/29abbd1c.html +112 -0
  100. package/article/30215.html +178 -0
  101. package/article/30552.html +78 -0
  102. package/article/30818.html +201 -0
  103. package/article/31330.html +364 -0
  104. package/article/3154.html +577 -0
  105. package/article/31695.html +348 -0
  106. package/article/31826.html +71 -0
  107. package/article/31843.html +132 -0
  108. package/article/32280.html +212 -0
  109. package/article/32431.html +74 -0
  110. package/article/32443.html +72 -0
  111. package/article/32732.html +122 -0
  112. package/article/3286.html +251 -0
  113. package/article/32960.html +198 -0
  114. package/article/33713.html +72 -0
  115. package/article/33899.html +615 -0
  116. package/article/34351.html +74 -0
  117. package/article/34372.html +89 -0
  118. package/article/34410.html +74 -0
  119. package/article/34431.html +118 -0
  120. package/article/3447.html +75 -0
  121. package/article/34474.html +142 -0
  122. package/article/34871.html +147 -0
  123. package/article/35397.html +175 -0
  124. package/article/3544.html +199 -0
  125. package/article/35503.html +115 -0
  126. package/article/35624.html +84 -0
  127. package/article/35697.html +384 -0
  128. package/article/35863.html +73 -0
  129. package/article/36037.html +253 -0
  130. package/article/36118.html +71 -0
  131. package/article/3621.html +119 -0
  132. package/article/36251.html +296 -0
  133. package/article/36642.html +352 -0
  134. package/article/37102.html +763 -0
  135. package/article/37336.html +351 -0
  136. package/article/37351.html +89 -0
  137. package/article/3760.html +294 -0
  138. package/article/37749.html +75 -0
  139. package/article/37789.html +83 -0
  140. package/article/38005.html +765 -0
  141. package/article/38009.html +284 -0
  142. package/article/38269.html +194 -0
  143. package/article/38344.html +88 -0
  144. package/article/38359.html +334 -0
  145. package/article/38423.html +379 -0
  146. package/article/38530.html +213 -0
  147. package/article/38743.html +268 -0
  148. package/article/38753.html +204 -0
  149. package/article/38881.html +71 -0
  150. package/article/39087.html +414 -0
  151. package/article/39309.html +84 -0
  152. package/article/39486.html +74 -0
  153. package/article/39637.html +306 -0
  154. package/article/39839.html +72 -0
  155. package/article/39937.html +152 -0
  156. package/article/39970.html +71 -0
  157. package/article/402.html +559 -0
  158. package/article/40698.html +71 -0
  159. package/article/40811.html +71 -0
  160. package/article/40964.html +462 -0
  161. package/article/41011.html +322 -0
  162. package/article/41152.html +78 -0
  163. package/article/41696.html +71 -0
  164. package/article/41717.html +281 -0
  165. package/article/41777.html +149 -0
  166. package/article/419.html +985 -0
  167. package/article/4233.html +136 -0
  168. package/article/4292.html +86 -0
  169. package/article/43302.html +96 -0
  170. package/article/43397.html +106 -0
  171. package/article/43724.html +281 -0
  172. package/article/43999.html +224 -0
  173. package/article/44426.html +77 -0
  174. package/article/44964.html +137 -0
  175. package/article/45004.html +123 -0
  176. package/article/4510.html +83 -0
  177. package/article/45156.html +320 -0
  178. package/article/45157.html +52 -0
  179. package/article/45267.html +87 -0
  180. package/article/45641.html +207 -0
  181. package/article/45960.html +75 -0
  182. package/article/46100.html +1262 -0
  183. package/article/46366.html +74 -0
  184. package/article/46771.html +96 -0
  185. package/article/46911.html +517 -0
  186. package/article/46948.html +137 -0
  187. package/article/46ee4850.html +349 -0
  188. package/article/47019.html +84 -0
  189. package/article/47532.html +94 -0
  190. package/article/4783.html +429 -0
  191. package/article/47972.html +72 -0
  192. package/article/48216.html +127 -0
  193. package/article/48252.html +185 -0
  194. package/article/48520.html +74 -0
  195. package/article/48722.html +75 -0
  196. package/article/48807.html +99 -0
  197. package/article/49126.html +323 -0
  198. package/article/50001.html +88 -0
  199. package/article/50058.html +151 -0
  200. package/article/50343.html +410 -0
  201. package/article/50510.html +82 -0
  202. package/article/51082.html +98 -0
  203. package/article/51677.html +111 -0
  204. package/article/5204.html +1085 -0
  205. package/article/52500.html +538 -0
  206. package/article/52689.html +259 -0
  207. package/article/52877.html +569 -0
  208. package/article/53125.html +191 -0
  209. package/article/53428.html +251 -0
  210. package/article/53524.html +74 -0
  211. package/article/53698.html +322 -0
  212. package/article/53803e6.html +93 -0
  213. package/article/53924.html +291 -0
  214. package/article/53962.html +253 -0
  215. package/article/54006.html +71 -0
  216. package/article/54018.html +88 -0
  217. package/article/54161.html +83 -0
  218. package/article/54178.html +69 -0
  219. package/article/54258.html +327 -0
  220. package/article/54295.html +214 -0
  221. package/article/54313.html +1976 -0
  222. package/article/54351.html +90 -0
  223. package/article/54604.html +80 -0
  224. package/article/54632.html +71 -0
  225. package/article/54912.html +756 -0
  226. package/article/54918.html +129 -0
  227. package/article/55119.html +136 -0
  228. package/article/55756.html +118 -0
  229. package/article/55769.html +136 -0
  230. package/article/55870.html +161 -0
  231. package/article/56139.html +92 -0
  232. package/article/56557.html +69 -0
  233. package/article/56604.html +69 -0
  234. package/article/56816.html +266 -0
  235. package/article/56926.html +153 -0
  236. package/article/57747.html +409 -0
  237. package/article/57965.html +475 -0
  238. package/article/58816.html +78 -0
  239. package/article/59059.html +435 -0
  240. package/article/59095.html +350 -0
  241. package/article/59349.html +244 -0
  242. package/article/59402.html +216 -0
  243. package/article/59448.html +55 -0
  244. package/article/59870.html +94 -0
  245. package/article/59877.html +208 -0
  246. package/article/5dbb6f41.html +86 -0
  247. package/article/6008.html +75 -0
  248. package/article/60327.html +126 -0
  249. package/article/6035.html +76 -0
  250. package/article/60428.html +71 -0
  251. package/article/60544.html +128 -0
  252. package/article/61319.html +95 -0
  253. package/article/61367.html +93 -0
  254. package/article/624d1918.html +292 -0
  255. package/article/62543.html +71 -0
  256. package/article/62887.html +169 -0
  257. package/article/63074.html +120 -0
  258. package/article/63266.html +311 -0
  259. package/article/63351.html +74 -0
  260. package/article/63542.html +104 -0
  261. package/article/63824.html +275 -0
  262. package/article/64051.html +653 -0
  263. package/article/64189b69.html +72 -0
  264. package/article/64354.html +75 -0
  265. package/article/64869.html +79 -0
  266. package/article/64923.html +596 -0
  267. package/article/65128.html +95 -0
  268. package/article/65295.html +79 -0
  269. package/article/6888.html +75 -0
  270. package/article/7065.html +84 -0
  271. package/article/7455.html +85 -0
  272. package/article/7a3ef8f.html +315 -0
  273. package/article/8140.html +188 -0
  274. package/article/8190.html +85 -0
  275. package/article/8225.html +78 -0
  276. package/article/84c9ccd6.html +159 -0
  277. package/article/8f9a9ae3.html +82 -0
  278. package/article/9174.html +73 -0
  279. package/article/9738.html +294 -0
  280. package/article/a4145266.html +71 -0
  281. package/article/bedea419.html +72 -0
  282. package/article/bf7e7421.html +78 -0
  283. package/article/c1867fbf.html +103 -0
  284. package/article/c5576490.html +70 -0
  285. package/article/dcb0db28.html +76 -0
  286. package/article/fc3b727a.html +79 -0
  287. package/atom.xml +445 -0
  288. package/baidusitemap.xml +1079 -0
  289. package/blocks/dns.txt +264 -0
  290. package/blocks/filter.txt +1070 -0
  291. package/blocks/script.js +42 -0
  292. package/categories/CDN/index.html +48 -0
  293. package/categories/IDE/index.html +48 -0
  294. package/categories/git/index.html +48 -0
  295. package/categories/hexo/index.html +48 -0
  296. package/categories//345/205/254/345/205/261/350/212/202/346/227/245/index.html +48 -0
  297. package/categories//345/210/206/344/272/253/index.html +48 -0
  298. package/categories//345/211/215/347/253/257/index.html +48 -0
  299. package/categories//345/211/215/347/253/257/page/2/index.html +48 -0
  300. package/categories//345/211/215/347/253/257//346/265/217/350/247/210/345/231/250/index.html +48 -0
  301. package/categories//345/211/215/347/253/257//346/265/217/350/247/210/345/231/250//347/275/221/347/273/234/345/215/217/350/256/256/index.html +48 -0
  302. package/categories//345/215/232/345/256/242/index.html +48 -0
  303. package/categories//345/267/245/345/205/267/index.html +48 -0
  304. package/categories//345/271/277/345/221/212/350/277/207/346/273/244/index.html +48 -0
  305. package/categories//345/271/277/345/221/212/350/277/207/346/273/244//350/247/206/351/242/221/347/224/265/350/247/206/345/260/217/350/257/264/346/274/253/347/224/273/350/265/204/350/256/257/351/237/263/344/271/220/index.html +48 -0
  306. package/categories//346/255/243/345/210/231/index.html +48 -0
  307. package/categories//346/265/217/350/247/210/345/231/250/index.html +48 -0
  308. package/categories//347/256/227/346/263/225/index.html +48 -0
  309. package/categories//350/265/204/350/256/257/index.html +48 -0
  310. package/categories//350/275/273/346/235/276/344/270/200/345/210/273/index.html +48 -0
  311. package/cdn/css/font-awesome.min.css +4 -0
  312. package/cdn/css/grids-responsive-min.css +7 -0
  313. package/cdn/css/normalize.css +349 -0
  314. package/cdn/css/pure-min.css +11 -0
  315. package/cdn/fonts/fontawesome-webfont.eot +0 -0
  316. package/cdn/fonts/fontawesome-webfont.svg +2671 -0
  317. package/cdn/fonts/fontawesome-webfont.ttf +0 -0
  318. package/cdn/fonts/fontawesome-webfont.woff +0 -0
  319. package/cdn/fonts/fontawesome-webfont.woff2 +0 -0
  320. package/cdn/js/Valine.min.js +17 -0
  321. package/cdn/js/canvas-nest.js +1 -0
  322. package/cdn/js/clipboard.min.js +7 -0
  323. package/cdn/js/crypto-js.js +25 -0
  324. package/cdn/js/jquery.min.js +2 -0
  325. package/css/default.css +1144 -0
  326. package/css/donate.css +338 -0
  327. package/css/hbe.style.css +749 -0
  328. package/css/style.css +2095 -0
  329. package/donate/index.html +39 -0
  330. package/google917dcf72f6e5c7f5.html +1 -0
  331. package/guestbook/index.html +68 -0
  332. package/hosts/ads.txt +149 -0
  333. package/hosts/flash.txt +9 -0
  334. package/hosts/github.txt +6 -0
  335. package/hosts/google.txt +16936 -0
  336. package/hosts/winrar.txt +2 -0
  337. package/img/alipay.svg +46 -0
  338. package/img/bitcoin.svg +135 -0
  339. package/img/blog.ico +0 -0
  340. package/img/blog.png +0 -0
  341. package/img/gaba.png +0 -0
  342. package/img/github.svg +1 -0
  343. package/img/like.svg +1 -0
  344. package/img/mp-mini.jpg +0 -0
  345. package/img/mp.png +0 -0
  346. package/img/paypal.svg +63 -0
  347. package/img/upy_logo.svg +59 -0
  348. package/img/wechat.svg +49 -0
  349. package/index.html +48 -0
  350. package/jd_root.txt +1 -0
  351. package/js/codeblock-resizer.js +51 -0
  352. package/js/dark.js +12 -0
  353. package/js/donate.js +87 -0
  354. package/js/fixedPage.js +106 -0
  355. package/js/gitment.browser.js +3751 -0
  356. package/js/search.js +86 -0
  357. package/js/share.js +60 -0
  358. package/js/smartresize.js +32 -0
  359. package/js/totop.js +12 -0
  360. package/kankan/index.html +77 -0
  361. package/lib/hbe.js +293 -0
  362. package/package.json +25 -0
  363. package/page/10/index.html +49 -0
  364. package/page/11/index.html +59 -0
  365. package/page/12/index.html +67 -0
  366. package/page/13/index.html +63 -0
  367. package/page/14/index.html +66 -0
  368. package/page/15/index.html +60 -0
  369. package/page/16/index.html +60 -0
  370. package/page/17/index.html +62 -0
  371. package/page/18/index.html +61 -0
  372. package/page/19/index.html +58 -0
  373. package/page/2/index.html +48 -0
  374. package/page/20/index.html +57 -0
  375. package/page/21/index.html +61 -0
  376. package/page/22/index.html +55 -0
  377. package/page/23/index.html +64 -0
  378. package/page/24/index.html +60 -0
  379. package/page/25/index.html +58 -0
  380. package/page/26/index.html +48 -0
  381. package/page/27/index.html +58 -0
  382. package/page/3/index.html +48 -0
  383. package/page/4/index.html +48 -0
  384. package/page/5/index.html +51 -0
  385. package/page/6/index.html +51 -0
  386. package/page/7/index.html +51 -0
  387. package/page/8/index.html +53 -0
  388. package/page/9/index.html +48 -0
  389. package/randomcall/README.html +1 -0
  390. package/randomcall/lucker.html +290 -0
  391. package/randomcall/lucky.png +0 -0
  392. package/robots.txt +22 -0
  393. package/search.xml +6740 -0
  394. package/sitemap.xml +2669 -0
  395. package/tags//345/216/237/345/210/233/index.html +48 -0
  396. package/tags//345/250/261/344/271/220/index.html +48 -0
  397. package/tags//346/211/213/345/206/231/index.html +48 -0
  398. package/tags//347/226/253/346/203/205/index.html +48 -0
  399. package/tags//350/275/254/350/275/275/index.html +48 -0
  400. package/tags//350/275/254/350/275/275/page/2/index.html +48 -0
  401. package/v.html +90 -0
@@ -0,0 +1,500 @@
1
+ <!DOCTYPE html><html lang="zh-CN" data-dark><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport"><meta content="yes" name="apple-mobile-web-app-capable"><meta content="black-translucent" name="apple-mobile-web-app-status-bar-style"><meta content="telephone=no" name="format-detection"><meta name="description" content="前端壹菜鸟,记录工作难题,关注前端知识,收集精彩博文,做技术的搬运工"><meta name="msvalidate.01" content="0FE4D8B3381D3D87088996B886E1E2BD"><title>经常被面试官考的 JavaScript 数据类型知识你真的懂吗? | 前端壹菜鸟</title><link rel="stylesheet" type="text/css" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/css/style.min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/normalize.css@latest/normalize.min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/purecss@latest/build/pure-min.min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/purecss@latest/build/grids-responsive-min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css"><link rel="icon" mask="" sizes="any" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.ico"><link rel="Shortcut Icon" type="image/x-icon" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.ico"><link rel="apple-touch-icon" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.png"><link rel="apple-touch-icon-precomposed" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.png"><link rel="alternate" type="application/atom+xml" href="/atom.xml"><script type="text/javascript" src="//cdn.jsdelivr.net/npm/jquery@latest/dist/jquery.min.js"></script><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8385136408348258"></script><script src="https://busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js" async></script><script>(function(){
2
+ var bp = document.createElement('script');
3
+ var curProtocol = window.location.protocol.split(':')[0];
4
+ if (curProtocol === 'https'){
5
+ bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
6
+ }
7
+ else{
8
+ bp.src = 'http://push.zhanzhang.baidu.com/push.js';
9
+ }
10
+ var s = document.getElementsByTagName("script")[0];
11
+ s.parentNode.insertBefore(bp, s);
12
+ })();
13
+ </script><script>(function(){
14
+ var src = 'https://jspassport.ssl.qhimg.com/11.0.1.js?d182b3f28525f2db83acfaaf6e696dba';
15
+ document.write('<script src="' + src + '" id="sozz"><\/script>');
16
+ })();
17
+ </script><script>var _hmt=_hmt||[];(function(){var hm=document.createElement("script");hm.src='https://hm.baidu.com/hm.js?011f0b44e8452bfa57fbfa23c5fe7683';var s=document.getElementsByTagName("script")[0];s.parentNode.insertBefore(hm, s);})();
18
+ </script><script async src="https://www.googletagmanager.com/gtag/js?id=UA-150860401-1"></script><script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);};gtag('js',new Date());gtag('config','UA-150860401-1');
19
+ </script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/fixedPage.min.js"></script><meta name="generator" content="Hexo 6.3.0"></head><body><div class="body_container"><div id="header"><div class="site-name"><a id="logo" href="/.">前端壹菜鸟</a><p class="description">关注前端知识,收集精彩博文,做技术的搬运工</p></div><div id="nav-menu"><a class="current" href="/." target="_self"><i class="fa fa-home"> 首页</i></a><a href="/archives/" target="_self"><i class="fa fa-archive"> 归档</i></a><a href="/guestbook/" target="_self"><i class="fa fa-comments"> 留言</i></a><a href="/about/" target="_self"><i class="fa fa-user"> 关于</i></a><a href="https://laonongmin.online/" target="_target"><i class="fa fa-group"> 看看</i></a><a href="https://love.xuehuayu.cn/" target="_target"><i class="fa fa-heart"> LOVE</i></a></div></div><div class="pure-g" id="layout"><div class="pure-u-1 pure-u-md-3-4"><div class="content_container"><div class="post"><h1 class="post-title c-post">经常被面试官考的 JavaScript 数据类型知识你真的懂吗?</h1><div class="post-meta"><span class="date">2019-11-19</span><span> | </span><span class="tag"><a href="/tags/%E8%BD%AC%E8%BD%BD/">转载 </a></span><span> | </span><span class="category"><a href="/categories/%E5%89%8D%E7%AB%AF/">前端 </a></span><span id="busuanzi_container_page_pv"> | <span id="busuanzi_value_page_pv"><i class="fa fa-spinner"></i></span><span> 阅读</span></span><span class="post-time"><span class="post-meta-item-text"> | </span><span class="post-meta-item-icon"><i class="fa fa-keyboard-o"></i><span class="post-count"> 4.3k</span><span class="post-meta-item-text"> 字</span></span></span><span class="post-time"> | <span class="post-meta-item-icon"><i class="fa fa-hourglass-half"></i><span class="post-count"> 17</span><span class="post-meta-item-text"> 分钟</span></span></span></div><a class="disqus-comment-count" href="/article/2475.html#vcomment"><span class="waline-comment-count" data-path="/article/2475.html"></span><span> 条评论</span></a><div class="post-content"><p><code>原文地址:https://mp.weixin.qq.com/s/uYxyDfqUJ2F1G5Iyj9bDiw</code></p>
20
+ <span id="more"></span>
21
+
22
+ <blockquote>
23
+ <p>作者:程序员成长指北 公号 &#x2F; koala(本文来自作者投稿)</p>
24
+ </blockquote>
25
+ <h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><p>面试了几个开发者,他们确实做过不少项目,能力也是不错的,但是发现javascript基础并不好,于是决定写一下这篇javascrip数据类型相关的基础文章,其实也不仅仅是因为面试了他们,之前自己在面试的时候,也曾经被虐过,面试官说过的最深刻的一句话我到现在都记得。</p>
26
+ <blockquote>
27
+ <p>基础很重要,只有基础好才会很少出bug,大多数的bug都是基础不扎实造成的。</p>
28
+ </blockquote>
29
+ <p>这里给出两道我们公司数据类型基础相关的面试题和答案,如果都能做对并且知道为什么(可以选择忽略本文章):</p>
30
+ <p><img src="https://mmbiz.qpic.cn/mmbiz_png/YBFV3Da0NwsOEFjxWIC2icBh7Ich9ZZgUKMdicTdMBiaYkghF08Vzm6ibq5e8EqnfrYZsVxbuKmuHQIfA8Fy80PcsQ/640?wx_fmt=png&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="xuehuayu.cn"></p>
31
+ <p><img src="https://mmbiz.qpic.cn/mmbiz_png/YBFV3Da0NwsOEFjxWIC2icBh7Ich9ZZgUMdA66IKF5GDibSjHvceribYyn03iaonia9zGN6QjGqmyJ65kNTJ1PUnlTg/640?wx_fmt=png&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="xuehuayu.cn"></p>
32
+ <p>本篇文章会以一个面试官问问题的角度来进行分析讲解</p>
33
+ <h1 id="js中的数据类型"><a href="#js中的数据类型" class="headerlink" title="js中的数据类型"></a>js中的数据类型</h1><blockquote>
34
+ <p>面试官问:说一说javascript中有哪些数据类型?</p>
35
+ </blockquote>
36
+ <p>JavaScript 中共有七种内置数据类型,包括<strong>基本类型</strong>和<strong>对象类型</strong>。</p>
37
+ <h3 id="基本类型"><a href="#基本类型" class="headerlink" title="基本类型"></a>基本类型</h3><p>基本类型分为以下六种:</p>
38
+ <ul>
39
+ <li><p>string(字符串)</p>
40
+ </li>
41
+ <li><p>boolean(布尔值)</p>
42
+ </li>
43
+ <li><p>number(数字)</p>
44
+ </li>
45
+ <li><p>symbol(符号)</p>
46
+ </li>
47
+ <li><p>null(空值)</p>
48
+ </li>
49
+ <li><p>undefined(未定义)</p>
50
+ </li>
51
+ </ul>
52
+ <p><strong>注意</strong>:</p>
53
+ <ol>
54
+ <li><p>string 、number 、boolean 和 null undefined 这五种类型统称为原始类型(Primitive),表示不能再细分下去的基本类型</p>
55
+ </li>
56
+ <li><p>symbol是ES6中新增的数据类型,symbol 表示独一无二的值,通过 Symbol 函数调用生成,由于生成的 symbol 值为原始类型,所以 Symbol 函数不能使用 new 调用;</p>
57
+ </li>
58
+ <li><p>null 和 undefined 通常被认为是特殊值,这两种类型的值唯一,就是其本身。</p>
59
+ </li>
60
+ </ol>
61
+ <h3 id="对象类型"><a href="#对象类型" class="headerlink" title="对象类型"></a>对象类型</h3><p>对象类型也叫引用类型,array和function是对象的子类型。对象在逻辑上是属性的无序集合,是存放各种值的容器。对象值存储的是引用地址,所以和基本类型值不可变的特性不同,对象值是可变的。</p>
62
+ <h1 id="js弱类型语言"><a href="#js弱类型语言" class="headerlink" title="js弱类型语言"></a>js弱类型语言</h1><blockquote>
63
+ <p>面试官问:说说你对javascript是弱类型语言的理解?</p>
64
+ </blockquote>
65
+ <p>JavaScript 是弱类型语言,而且JavaScript 声明变量的时候并没有预先确定的类型, 变量的类型就是其值的类型,也就是说变量当前的类型由其值所决定,夸张点说上一秒种的String,下一秒可能就是个Number类型了,这个过程可能就进行了某些操作发生了强制类型转换。虽然弱类型的这种<strong>不需要预先确定类型</strong>的特性给我们带来了便利,同时也会给我们带来困扰。为了能充分利用该特性就必须掌握类型转换的原理,</p>
66
+ <h1 id="js中的强制转换规则"><a href="#js中的强制转换规则" class="headerlink" title="js中的强制转换规则"></a>js中的强制转换规则</h1><blockquote>
67
+ <p>面试官问:javascript中强制类型转换是一个非常易出现bug的点,知道强制转换时候的规则吗?</p>
68
+ </blockquote>
69
+ <p>注:规则最好配合下面什么时候发生转换使用这些规则看效果更佳。</p>
70
+ <h3 id="ToPrimitive-转换为原始值"><a href="#ToPrimitive-转换为原始值" class="headerlink" title="ToPrimitive(转换为原始值)"></a>ToPrimitive(转换为原始值)</h3><p>ToPrimitive对原始类型不发生转换处理,只<strong>针对引用类型(object)的</strong>,其目的是将引用类型(object)转换为非对象类型,也就是原始类型。</p>
71
+ <p>ToPrimitive 运算符<strong>接受一个值,和一个可选的 期望类型作参数</strong>。ToPrimitive 运算符将值转换为非对象类型,如果对象有能力被转换为不止一种原语类型,可以使用可选的 <strong>期望类型</strong> 来暗示那个类型。</p>
72
+ <p>转换后的结果<strong>原始类型</strong>是由期望类型决定的,期望类型其实就是我们传递的type。直接看下面比较清楚。 ToPrimitive方法大概长这么个样子具体如下。</p>
73
+ <pre><code>/**
74
+ * @obj 需要转换的对象
75
+ * @type 期望转换为的原始数据类型,可选
76
+ */
77
+ ToPrimitive(obj,type)
78
+ </code></pre>
79
+ <h4 id="type不同值的说明"><a href="#type不同值的说明" class="headerlink" title="type不同值的说明"></a>type不同值的说明</h4><ul>
80
+ <li>type为string:</li>
81
+ </ul>
82
+ <ol>
83
+ <li><p>先调用obj的toString方法,如果为原始值,则return,否则第2步</p>
84
+ </li>
85
+ <li><p>调用obj的valueOf方法,如果为原始值,则return,否则第3步</p>
86
+ </li>
87
+ <li><p>抛出TypeError 异常</p>
88
+ </li>
89
+ </ol>
90
+ <ul>
91
+ <li>type为number:</li>
92
+ </ul>
93
+ <ol>
94
+ <li><p>调用obj的valueOf方法,如果为原始值,则返回,否则下第2步</p>
95
+ </li>
96
+ <li><p>调用obj的toString方法,如果为原始值,则return,否则第3步</p>
97
+ </li>
98
+ <li><p>抛出TypeError 异常</p>
99
+ </li>
100
+ </ol>
101
+ <ul>
102
+ <li>type参数为空</li>
103
+ </ul>
104
+ <ol>
105
+ <li><p>该对象为Date,则type被设置为String</p>
106
+ </li>
107
+ <li><p>否则,type被设置为Number</p>
108
+ </li>
109
+ </ol>
110
+ <h4 id="Date数据类型特殊说明:"><a href="#Date数据类型特殊说明:" class="headerlink" title="Date数据类型特殊说明:"></a>Date数据类型特殊说明:</h4><p>对于Date数据类型,我们更多期望获得的是其转为时间后的字符串,而非毫秒值(时间戳),如果为number,则会取到对应的毫秒值,显然字符串使用更多。 其他类型对象按照取值的类型操作即可。</p>
111
+ <h4 id="ToPrimitive总结"><a href="#ToPrimitive总结" class="headerlink" title="ToPrimitive总结"></a>ToPrimitive总结</h4><p>ToPrimitive转成何种原始类型,取决于type,type参数可选,若指定,则按照指定类型转换,若不指定,默认根据实用情况分两种情况,Date为string,其余对象为number。那么什么时候会指定type类型呢,那就要看下面两种转换方式了。</p>
112
+ <h3 id="toString-NaN"><a href="#toString-NaN" class="headerlink" title="toString"></a>toString</h3><p><strong>Object.prototype.toString()</strong></p>
113
+ <p>toString() 方法返回一个表示该对象的字符串。</p>
114
+ <p>每个对象都有一个 toString() 方法,当对象被表示为文本值时或者当以期望字符串的方式引用对象时,该方法被自动调用。</p>
115
+ <p>这里先记住,valueOf() 和 toString() 在特定的场合下会自行调用。</p>
116
+ <h3 id="valueOf-NaN"><a href="#valueOf-NaN" class="headerlink" title="valueOf"></a>valueOf</h3><p>Object.prototype.valueOf()方法返回指定对象的原始值。</p>
117
+ <p>JavaScript 调用 valueOf() 方法用来把对象转换成原始类型的值(数值、字符串和布尔值)。但是我们很少需要自己调用此函数,valueOf 方法一般都会被 JavaScript 自动调用。</p>
118
+ <p>不同内置对象的valueOf实现:</p>
119
+ <ul>
120
+ <li><p>String &#x3D;&gt; 返回字符串值</p>
121
+ </li>
122
+ <li><p>Number &#x3D;&gt; 返回数字值</p>
123
+ </li>
124
+ <li><p>Date &#x3D;&gt; 返回一个数字,即时间值,字符串中内容是依赖于具体实现的</p>
125
+ </li>
126
+ <li><p>Boolean &#x3D;&gt; 返回Boolean的this值</p>
127
+ </li>
128
+ <li><p>Object &#x3D;&gt; 返回this</p>
129
+ </li>
130
+ </ul>
131
+ <p>对照代码会更清晰一些:</p>
132
+ <pre><code>var str = newString(&#39;123&#39;);
133
+ console.log(str.valueOf());//123
134
+
135
+ var num = newNumber(123);
136
+ console.log(num.valueOf());//123
137
+
138
+ var date = newDate();
139
+ console.log(date.valueOf()); //1526990889729
140
+
141
+ var bool = newBoolean(&#39;123&#39;);
142
+ console.log(bool.valueOf());//true
143
+
144
+ var obj = newObject(&#123;valueOf:()=&gt;&#123;
145
+ return1
146
+ &#125; &#125;)
147
+ console.log(obj.valueOf());//1
148
+ </code></pre>
149
+ <h3 id="Number"><a href="#Number" class="headerlink" title="Number"></a>Number</h3><p>Number运算符转换规则:</p>
150
+ <ul>
151
+ <li><p>null 转换为 0</p>
152
+ </li>
153
+ <li><p>undefined 转换为 NaN</p>
154
+ </li>
155
+ <li><p>true 转换为 1,false 转换为 0</p>
156
+ </li>
157
+ <li><p>字符串转换时遵循数字常量规则,转换失败返回 NaN</p>
158
+ </li>
159
+ </ul>
160
+ <blockquote>
161
+ <p>注意:对象这里要先转换为原始值,调用ToPrimitive转换,type指定为number了,继续回到ToPrimitive进行转换(看ToPrimitive)。</p>
162
+ </blockquote>
163
+ <h3 id="String"><a href="#String" class="headerlink" title="String"></a>String</h3><p>String 运算符转换规则</p>
164
+ <ul>
165
+ <li><p>null 转换为 ‘null’</p>
166
+ </li>
167
+ <li><p>undefined 转换为 undefined</p>
168
+ </li>
169
+ <li><p>true 转换为 ‘true’,false 转换为 ‘false’</p>
170
+ </li>
171
+ <li><p>数字转换遵循通用规则,极大极小的数字使用指数形式</p>
172
+ </li>
173
+ </ul>
174
+ <blockquote>
175
+ <p>注意:对象这里要先转换为原始值,调用ToPrimitive转换,type就指定为string了,继续回到ToPrimitive进行转换(看ToPrimitive)。</p>
176
+ </blockquote>
177
+ <pre><code>String(null) // &#39;null&#39;
178
+ String(undefined) // &#39;undefined&#39;
179
+ String(true) // &#39;true&#39;
180
+ String(1) // &#39;1&#39;
181
+ String(-1) // &#39;-1&#39;
182
+ String(0) // &#39;0&#39;
183
+ String(-0) // &#39;0&#39;
184
+ String(Math.pow(1000,10)) // &#39;1e+30&#39;
185
+ String(Infinity) // &#39;Infinity&#39;
186
+ String(-Infinity) // &#39;-Infinity&#39;
187
+ String(&#123;&#125;) // &#39;[object Object]&#39;
188
+ String([1,[2,3]]) // &#39;1,2,3&#39;
189
+ String([&#39;koala&#39;,1]) //koala,1
190
+ </code></pre>
191
+ <h3 id="Boolean"><a href="#Boolean" class="headerlink" title="Boolean"></a>Boolean</h3><p>ToBoolean 运算符转换规则</p>
192
+ <p>除了下述 6 个值转换结果为 false,其他全部为 true:</p>
193
+ <ol>
194
+ <li><p>undefined</p>
195
+ </li>
196
+ <li><p>null</p>
197
+ </li>
198
+ <li><p>-0</p>
199
+ </li>
200
+ <li><p>0或+0</p>
201
+ </li>
202
+ <li><p>NaN</p>
203
+ </li>
204
+ <li><p>‘’(空字符串)</p>
205
+ </li>
206
+ </ol>
207
+ <p>假值以外的值都是真值。其中包括所有对象(包括空对象)的转换结果都是true,甚至连false对应的布尔对象new Boolean(false)也是true</p>
208
+ <pre><code>Boolean(undefined) // false
209
+ Boolean(null) // false
210
+ Boolean(0) // false
211
+ Boolean(NaN) // false
212
+ Boolean(&#39;&#39;) // false
213
+
214
+ Boolean(&#123;&#125;) // true
215
+ Boolean([]) // true
216
+ Boolean(newBoolean(false)) // true
217
+ </code></pre>
218
+ <h1 id="js转换规则不同场景应用"><a href="#js转换规则不同场景应用" class="headerlink" title="js转换规则不同场景应用"></a>js转换规则不同场景应用</h1><blockquote>
219
+ <p>面试官问:知道了具体转换成什么的规则,但是都在什么情况下发生什么样的转换呢?</p>
220
+ </blockquote>
221
+ <h3 id="什么时候自动转换为string类型"><a href="#什么时候自动转换为string类型" class="headerlink" title="什么时候自动转换为string类型"></a>什么时候自动转换为string类型</h3><ul>
222
+ <li>在没有对象的前提下</li>
223
+ </ul>
224
+ <p>字符串的自动转换,主要发生在字符串的<strong>加法运算</strong>时。当一个值为字符串,另一个值为非字符串,则后者转为字符串。</p>
225
+ <pre><code>&#39;2&#39; + 1// &#39;21&#39;
226
+ &#39;2&#39; + true// &quot;2true&quot;
227
+ &#39;2&#39; + false// &quot;2false&quot;
228
+ &#39;2&#39; + undefined// &quot;2undefined&quot;
229
+ &#39;2&#39; + null// &quot;2null&quot;
230
+ </code></pre>
231
+ <ul>
232
+ <li><p>当有对象且与对象+时候</p>
233
+ <p> &#x2F;&#x2F;toString的对象<br> var obj2 &#x3D; {<br> toString:function(){<br> return’a’<br> }<br> }<br> console.log(‘2’+obj2)<br> &#x2F;&#x2F;输出结果2a</p>
234
+ <p> &#x2F;&#x2F;常规对象<br> var obj1 &#x3D; {<br> a:1,<br> b:2<br> }<br> console.log(‘2’+obj1);<br> &#x2F;&#x2F;输出结果 2[object Object]</p>
235
+ <p> &#x2F;&#x2F;几种特殊对象<br> ‘2’ + {} &#x2F;&#x2F; “2[object Object]”<br> ‘2’ + [] &#x2F;&#x2F; “2”<br> ‘2’ + function (){} &#x2F;&#x2F; “2function (){}”<br> ‘2’ + [‘koala’,1] &#x2F;&#x2F; 2koala,1</p>
236
+ </li>
237
+ </ul>
238
+ <p>对下面’2’+obj2详细举例说明如下:</p>
239
+ <ol>
240
+ <li><p>左边为string,ToPrimitive原始值转换后不发生变化</p>
241
+ </li>
242
+ <li><p>右边转化时同样按照ToPrimitive进行原始值转换,由于指定的type是number,进行ToPrimitive转化调用obj2.valueof(),得到的不是原始值,进行第三步</p>
243
+ </li>
244
+ <li><p>调用toString() return ‘a’</p>
245
+ </li>
246
+ <li><p>符号两边存在string,而且是+号运算符则都采用String规则转换为string类型进行拼接</p>
247
+ </li>
248
+ <li><p>输出结果2a</p>
249
+ </li>
250
+ </ol>
251
+ <p>对下面’2’+obj1详细举例说明如下:</p>
252
+ <ol>
253
+ <li><p>左边为string,ToPrimitive转换为原始值后不发生变化</p>
254
+ </li>
255
+ <li><p>右边转化时同样按照ToPrimitive进行原始值转换,由于指定的type是number,进行ToPrimitive转化调用obj2.valueof(),得到{ a: 1, b: 2</p>
256
+ </li>
257
+ <li><p>调用toString() return [object Object]</p>
258
+ </li>
259
+ <li><p>符号两边存在string,而且是+号运算符则都采用String规则转换为string类型进行拼接</p>
260
+ </li>
261
+ <li><p>输出结果2[object Object]</p>
262
+ </li>
263
+ </ol>
264
+ <p>代码中几种特殊对象的转换规则基本相同,就不一一说明,大家可以想一下流程。</p>
265
+ <p>注意:不管是对象还不是对象,都有一个转换为原始值的过程,也就是ToPrimitive转换,只不过原始类型转换后不发生变化,对象类型才会发生具体转换。</p>
266
+ <h4 id="string类型转换开发过程中可能出错的点:"><a href="#string类型转换开发过程中可能出错的点:" class="headerlink" title="string类型转换开发过程中可能出错的点:"></a>string类型转换开发过程中可能出错的点:</h4><pre><code>var obj = &#123;
267
+ width: &#39;100&#39;
268
+ &#125;;
269
+
270
+ obj.width + 20// &quot;10020&quot;
271
+ </code></pre>
272
+ <p>预期输出结果120 实际输出结果10020</p>
273
+ <h3 id="什么时候自动转换为Number类型"><a href="#什么时候自动转换为Number类型" class="headerlink" title="什么时候自动转换为Number类型"></a>什么时候自动转换为Number类型</h3><ul>
274
+ <li>有加法运算符,但是无String类型的时候,都会优先转换为Number类型</li>
275
+ </ul>
276
+ <p>例子:</p>
277
+ <pre><code>true + 0// 1
278
+ true + true// 2
279
+ true + false//1
280
+ </code></pre>
281
+ <ul>
282
+ <li><p><strong>除了加法运算符,其他运算符都会把运算自动转成数值。</strong>例子:</p>
283
+ <p> ‘5’ - ‘2’&#x2F;&#x2F; 3<br> ‘5’ * ‘2’&#x2F;&#x2F; 10<br> true - 1&#x2F;&#x2F; 0<br> false - 1&#x2F;&#x2F; -1<br> ‘1’ - 1&#x2F;&#x2F; 0<br> ‘5’ * [] &#x2F;&#x2F; 0<br> false &#x2F; ‘5’&#x2F;&#x2F; 0<br> ‘abc’ - 1&#x2F;&#x2F; NaN<br> null + 1&#x2F;&#x2F; 1<br> undefined + 1&#x2F;&#x2F; NaN</p>
284
+ <p> &#x2F;&#x2F;一元运算符(注意点)<br> +’abc’&#x2F;&#x2F; NaN<br> -‘abc’&#x2F;&#x2F; NaN<br> +true&#x2F;&#x2F; 1<br> -false&#x2F;&#x2F; 0</p>
285
+ </li>
286
+ </ul>
287
+ <blockquote>
288
+ <p>注意:null转为数值时为0,而undefined转为数值时为NaN。</p>
289
+ </blockquote>
290
+ <h4 id="判断等号也放在Number里面特殊说明"><a href="#判断等号也放在Number里面特殊说明" class="headerlink" title="判断等号也放在Number里面特殊说明"></a>判断等号也放在Number里面特殊说明</h4><p>&#x3D;&#x3D; 抽象相等比较与+运算符不同,不再是String优先,而是Nuber优先。 下面列举x &#x3D;&#x3D; y的例子</p>
291
+ <ol>
292
+ <li><p>如果x,y均为number,直接比较 没什么可解释的了</p>
293
+ <p> 1 &#x3D;&#x3D; 2&#x2F;&#x2F;false</p>
294
+ </li>
295
+ <li><p>如果存在对象,ToPrimitive() type为number进行转换,再进行后面比较</p>
296
+ <p> var obj1 &#x3D; {<br> valueOf:function(){<br> return’1’<br> }<br> }<br> 1 &#x3D;&#x3D; obj1 &#x2F;&#x2F;true<br> &#x2F;&#x2F;obj1转为原始值,调用obj1.valueOf()<br> &#x2F;&#x2F;返回原始值’1’<br> &#x2F;&#x2F;‘1’toNumber得到 1 然后比较 1 &#x3D;&#x3D; 1<br> [] &#x3D;&#x3D; ![xuehuayu.cn] &#x2F;&#x2F;true<br> &#x2F;&#x2F;[]作为对象ToPrimitive得到 ‘’<br> &#x2F;&#x2F;![xuehuayu.cn]作为boolean转换得到0<br> &#x2F;&#x2F;‘’ &#x3D;&#x3D; 0<br> &#x2F;&#x2F;转换为 0&#x3D;&#x3D;0 &#x2F;&#x2F;true</p>
297
+ </li>
298
+ <li><p>存在boolean,按照ToNumber将boolean转换为1或者0,再进行后面比较</p>
299
+ <p> &#x2F;&#x2F;boolean 先转成number,按照上面的规则得到1<br> &#x2F;&#x2F;3 &#x3D;&#x3D; 1 false<br> &#x2F;&#x2F;0 &#x3D;&#x3D; 0 true<br> 3 &#x3D;&#x3D; true&#x2F;&#x2F; false<br> ‘0’ &#x3D;&#x3D; false&#x2F;&#x2F;true</p>
300
+ </li>
301
+ </ol>
302
+ <p>4.如果x为string,y为number,x转成number进行比较</p>
303
+ <pre><code>//&#39;0&#39; toNumber()得到 0
304
+ //0 == 0 true
305
+ &#39;0&#39; == 0//true
306
+ </code></pre>
307
+ <h3 id="什么时候进行布尔转换"><a href="#什么时候进行布尔转换" class="headerlink" title="什么时候进行布尔转换"></a>什么时候进行布尔转换</h3><ul>
308
+ <li><p>布尔比较时</p>
309
+ </li>
310
+ <li><p>if(obj) , while(obj) 等判断时或者 三元运算符只能够包含布尔值</p>
311
+ </li>
312
+ </ul>
313
+ <p>条件部分的每个值都相当于false,使用否定运算符后,就变成了true</p>
314
+ <pre><code>if ( !undefined
315
+ &amp;&amp; !null
316
+ &amp;&amp; !0
317
+ &amp;&amp; !NaN
318
+ &amp;&amp; !&#39;&#39;
319
+ ) &#123;
320
+ console.log(&#39;true&#39;);
321
+ &#125; // true
322
+
323
+ //下面两种情况也会转成布尔类型
324
+ expression ? true : false
325
+ !! expression
326
+ </code></pre>
327
+ <h1 id="js中的数据类型判断"><a href="#js中的数据类型判断" class="headerlink" title="js中的数据类型判断"></a>js中的数据类型判断</h1><blockquote>
328
+ <p>面试官问:如何判断数据类型?怎么判断一个值到底是数组类型还是对象?</p>
329
+ </blockquote>
330
+ <p>三种方式,分别为 typeof、instanceof 和 Object.prototype.toString()</p>
331
+ <h3 id="typeof"><a href="#typeof" class="headerlink" title="typeof"></a>typeof</h3><p>通过 typeof操作符来判断一个值属于哪种基本类型。</p>
332
+ <pre><code>typeof&#39;seymoe&#39;// &#39;string&#39;
333
+ typeoftrue// &#39;boolean&#39;
334
+ typeof10// &#39;number&#39;
335
+ typeofSymbol() // &#39;symbol&#39;
336
+ typeofnull// &#39;object&#39; 无法判定是否为 null
337
+ typeofundefined// &#39;undefined&#39;
338
+
339
+ typeof &#123;&#125; // &#39;object&#39;
340
+ typeof [] // &#39;object&#39;
341
+ typeof(() =&gt; &#123;&#125;) // &#39;function&#39;
342
+ </code></pre>
343
+ <p>上面代码的输出结果可以看出,</p>
344
+ <ol>
345
+ <li><p>null 的判定有误差,得到的结果 如果使用 typeof,null得到的结果是object</p>
346
+ </li>
347
+ <li><p>操作符对对象类型及其子类型,例如函数(可调用对象)、数组(有序索引对象)等进行判定,则除了函数都会得到 object 的结果。</p>
348
+ </li>
349
+ </ol>
350
+ <p>综上可以看出typeOf对于判断类型还有一些不足,在对象的子类型和null情况下。</p>
351
+ <h3 id="instanceof"><a href="#instanceof" class="headerlink" title="instanceof"></a>instanceof</h3><p>通过 instanceof 操作符也可以对对象类型进行判定,其原理就是测试构造函数的 prototype 是否出现在被检测对象的原型链上。</p>
352
+ <pre><code>[] instanceofArray// true
353
+ (&#123;&#125;) instanceofObject// true
354
+ (()=&gt;&#123;&#125;) instanceofFunction// true
355
+ </code></pre>
356
+ <p>复制代码注意:instanceof 也不是万能的。 举个例子:</p>
357
+ <pre><code>let arr = []
358
+ let obj = &#123;&#125;
359
+ arr instanceofArray// true
360
+ arr instanceofObject// true
361
+ obj instanceofObject// true
362
+ </code></pre>
363
+ <p>在这个例子中,arr 数组相当于 new Array() 出的一个实例,所以 arr.<strong>proto</strong> &#x3D;&#x3D;&#x3D; Array.prototype,又因为 Array 属于 Object 子类型,即 Array.prototype.<strong>proto</strong> &#x3D;&#x3D;&#x3D; Object.prototype,所以 Object 构造函数在 arr 的原型链上。所以 instanceof 仍然无法优雅的判断一个值到底属于数组还是普通对象。</p>
364
+ <p>还有一点需要说明下,有些开发者会说 Object.prototype.<strong>proto</strong> &#x3D;&#x3D;&#x3D; null,岂不是说 arr instanceof null 也应该为 true,这个语句其实会报错提示右侧参数应该为对象,这也印证 typeof null 的结果为 object 真的只是javascript中的一个 bug 。</p>
365
+ <p>Object.prototype.<strong>toString</strong>() 可以说是判定 JavaScript 中数据类型的终极解决方法了,具体用法请看以下代码:</p>
366
+ <pre><code>Object.prototype.toString.call(&#123;&#125;) // &#39;[object Object]&#39;
367
+ Object.prototype.toString.call([]) // &#39;[object Array]&#39;
368
+ Object.prototype.toString.call(() =&gt; &#123;&#125;) // &#39;[object Function]&#39;
369
+ Object.prototype.toString.call(&#39;seymoe&#39;) // &#39;[object String]&#39;
370
+ Object.prototype.toString.call(1) // &#39;[object Number]&#39;
371
+ Object.prototype.toString.call(true) // &#39;[object Boolean]&#39;
372
+ Object.prototype.toString.call(Symbol()) // &#39;[object Symbol]&#39;
373
+ Object.prototype.toString.call(null) // &#39;[object Null]&#39;
374
+ Object.prototype.toString.call(undefined) // &#39;[object Undefined]&#39;
375
+
376
+ Object.prototype.toString.call(newDate()) // &#39;[object Date]&#39;
377
+ Object.prototype.toString.call(Math) // &#39;[object Math]&#39;
378
+ Object.prototype.toString.call(newSet()) // &#39;[object Set]&#39;
379
+ Object.prototype.toString.call(newWeakSet()) // &#39;[object WeakSet]&#39;
380
+ Object.prototype.toString.call(newMap()) // &#39;[object Map]&#39;
381
+ Object.prototype.toString.call(newWeakMap()) // &#39;[object WeakMap]&#39;
382
+ </code></pre>
383
+ <p>我们可以发现该方法在传入任何类型的值都能返回对应准确的对象类型。用法虽简单明了,但其中有几个点需要理解清楚:</p>
384
+ <ul>
385
+ <li><p>该方法本质就是依托Object.prototype.toString() 方法得到对象内部属性 [[Class]]</p>
386
+ </li>
387
+ <li><p>传入原始类型却能够判定出结果是因为对值进行了包装</p>
388
+ </li>
389
+ <li><p>null 和 undefined 能够输出结果是内部实现有做处理</p>
390
+ </li>
391
+ </ul>
392
+ <h1 id="NaN相关总结"><a href="#NaN相关总结" class="headerlink" title="NaN相关总结"></a>NaN相关总结</h1><h3 id="NaN的概念"><a href="#NaN的概念" class="headerlink" title="NaN的概念"></a>NaN的概念</h3><p>NaN 是一个全局对象的属性,NaN 是一个全局对象的属性,N<strong>aN是一种特殊的Number类型</strong>。</p>
393
+ <h3 id="什么时候返回NaN-(开篇第二道题也得到解决)"><a href="#什么时候返回NaN-(开篇第二道题也得到解决)" class="headerlink" title="什么时候返回NaN (开篇第二道题也得到解决)"></a>什么时候返回NaN (开篇第二道题也得到解决)</h3><ul>
394
+ <li><p>无穷大除以无穷大</p>
395
+ </li>
396
+ <li><p>给任意负数做开方运算</p>
397
+ </li>
398
+ <li><p>算数运算符与不是数字或无法转换为数字的操作数一起使用</p>
399
+ </li>
400
+ <li><p>字符串解析成数字</p>
401
+ </li>
402
+ </ul>
403
+ <p>一些例子:</p>
404
+ <pre><code>Infinity / Infinity; // 无穷大除以无穷大
405
+ Math.sqrt(-1); // 给任意负数做开方运算
406
+ &#39;a&#39; - 1; // 算数运算符与不是数字或无法转换为数字的操作数一起使用
407
+ &#39;a&#39; * 1;
408
+ &#39;a&#39; / 1;
409
+ parseInt(&#39;a&#39;); // 字符串解析成数字
410
+ parseFloat(&#39;a&#39;);
411
+
412
+ Number(&#39;a&#39;); //NaN
413
+ &#39;abc&#39; - 1// NaN
414
+ undefined + 1// NaN
415
+ //一元运算符(注意点)
416
+ +&#39;abc&#39;// NaN
417
+ -&#39;abc&#39;// NaN
418
+ </code></pre>
419
+ <h1 id="误区"><a href="#误区" class="headerlink" title="误区"></a>误区</h1><h3 id="toString和String的区别"><a href="#toString和String的区别" class="headerlink" title="toString和String的区别"></a>toString和String的区别</h3><ul>
420
+ <li>toString</li>
421
+ </ul>
422
+ <ol>
423
+ <li><p>toString()可以将数据都转为字符串,但是null和undefined不可以转换。</p>
424
+ <p> console.log(null.toString())<br> &#x2F;&#x2F;报错 TypeError: Cannot read property ‘toString’ of null</p>
425
+ <p> console.log(undefined.toString())<br> &#x2F;&#x2F;报错 TypeError: Cannot read property ‘toString’ of undefined</p>
426
+ </li>
427
+ <li><p>toString()括号中可以写数字,代表进制</p>
428
+ </li>
429
+ </ol>
430
+ <p>二进制:.toString(2);</p>
431
+ <p>八进制:.toString(8);</p>
432
+ <p>十进制:.toString(10);</p>
433
+ <p>十六进制:.toString(16);</p>
434
+ <ul>
435
+ <li>String</li>
436
+ </ul>
437
+ <ol>
438
+ <li><p>String()可以将null和undefined转换为字符串,但是没法转进制字符串</p>
439
+ <p> console.log(String(null));<br> &#x2F;&#x2F; null<br> console.log(String(undefined));<br> &#x2F;&#x2F; undefined</p>
440
+ </li>
441
+ </ol>
442
+ <p><strong>推荐阅读</strong></p>
443
+ <p>(点击标题可跳转阅读)</p>
444
+ <p><a target="_blank" rel="noopener" href="http://mp.weixin.qq.com/s?__biz=MzAxODE2MjM1MA==&amp;mid=2651557380&amp;idx=2&amp;sn=1ca4f3ec8efc50d82d4a095fb3ffc315&amp;chksm=802559c5b752d0d35d78b1fab1d06658dabaf00c5c659c5c91ea3514254f5bd4f74e49df653a&amp;scene=21#wechat_redirect">9 个项目助你在 2020 年成为前端大神!</a></p>
445
+ <p><a target="_blank" rel="noopener" href="http://mp.weixin.qq.com/s?__biz=MzAxODE2MjM1MA==&amp;mid=2651557372&amp;idx=2&amp;sn=5839349ca00758767ccbd2df99060e9a&amp;chksm=80255a3db752d32bf53fff859191e367b43445450e692a208cd58b3cb7d7f752d86a367dfc8a&amp;scene=21#wechat_redirect">setTimeout 的实现原理和使用注意</a></p>
446
+ <p><a target="_blank" rel="noopener" href="http://mp.weixin.qq.com/s?__biz=MzAxODE2MjM1MA==&amp;mid=2651557366&amp;idx=1&amp;sn=6e90edc4b02c27dd4eb2386d0f71578c&amp;chksm=80255a37b752d321ae8317e2468efebe5a05de826b7e4d81ddd593260d0b5b91c5113e27ff5f&amp;scene=21#wechat_redirect">JavaScript 运行原理</a></p>
447
+ <p>觉得本文对你有帮助?请分享给更多人</p>
448
+ <p>关注「前端大全」加星标,提升前端技能</p>
449
+ <p><img src="https://mmbiz.qpic.cn/mmbiz_png/zPh0erYjkib3jzxuxibgz8GJ7k0UVp4kHMMDsL32ialKjpkgA9q7BFkbJ8VRYh0Liad1x6rD7w6oU7icR9DVPgsIxzQ/640?wx_fmt=png&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="xuehuayu.cn"></p>
450
+ <p>好文章,我在看❤️</p>
451
+ </div><iframe src="/donate/?AliPayQR=https://store.xuehuayu.cn/store/public/alipay_qr.jpg&amp;WeChatQR=https://store.xuehuayu.cn/store/public/wechat_qr.png&amp;UnionPayQR=null&amp;GitHub=null&amp;BTCQR=null&amp;BTCKEY=null&amp;PayPal=https://www.paypal.com/paypalme/OrdinaryPerson" style="overflow-x:hidden; overflow-y:hidden; border:0xp none #fff; min-height:240px; width:100%;" frameborder="0" scrolling="no"></iframe><div><ul class="post-copyright"><li class="post-copyright-author"><strong>本文作者:</strong>雪花雨</li><li class="post-copyright-link"><strong>本文链接:</strong><a href="/article/2475.html">https://xuehuayu.cn/article/2475.html</a></li><li class="post-copyright-license"><strong>版权声明:</strong>① 标为原创的文章为博主原创,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接。② 转载文章来自网络,已标明出处,<a href="mailto:cainiaoblog@126.com">侵删</a>。</li></ul></div><br><div class="tags"><a href="/tags/%E8%BD%AC%E8%BD%BD/">转载</a></div><div class="post-nav"><a class="pre" href="/article/46100.html">21 个 React 性能优化技巧</a><a class="next" href="/article/24826.html">TypeScript 3.7 来了,支持 Optional Chaining!</a></div><div id="vcomment"></div><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@waline/client@v2/dist/waline.min.css"><script src="//cdn.jsdelivr.net/npm/@waline/client@v2/dist/waline.js"></script><script>const origin = window.location.origin
452
+ const serverURL = origin.includes('cainiaoblog') ? 'https://cmts.cainiaoblog.cn' : 'https://cmts.xuehuayu.cn'
453
+ const locale = {
454
+ placeholder: '请正确填写昵称和邮箱,方便接收回复通知~',
455
+ sofa: '沙发空缺中,还不快抢~',
456
+ };
457
+ Waline.init({
458
+ el: '#vcomment',
459
+ serverURL: serverURL,
460
+ pageSize: '20',
461
+ visitor: true, // 阅读量统计
462
+ requiredMeta: ['nick', 'mail'],
463
+ emoji: [
464
+ 'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/weibo',
465
+ 'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/qq',
466
+ 'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/tw-emoji',
467
+ ],
468
+ locale,
469
+ pageview: true
470
+ })
471
+ </script></div></div></div><div class="pure-u-1 pure-u-md-1-4 fixed-search hidden_mid_and_down"><div id="sidebar"><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/search.min.js"></script><div class="widget"><div class="widget-search"><input class="search" type="radio" name="search" value="baidu" id="baidu" checked="checked"/><label class="label" for="baidu" title="百度全站搜索">百度</label><input class="search" type="radio" name="search" value="google" id="google"/><label class="label" for="google" title="谷歌全站搜索">谷歌</label><input class="search" type="radio" name="search" value="self" id="self"/><label class="label" for="self" title="使用站内搜索">站内</label></div><div class="widget" id="search"><form class="search-form" action="//www.baidu.com/baidu" method="get" accept-charset="utf-8" target="_blank"><input type="search" name="word" maxlength="30" placeholder="百度全站搜索"/><input type="hidden" name="si" value="xuehuayu.cn"/><input type="hidden" name="cl" value="3"/><input type="hidden" name="ct" value="2097152"/><input type="hidden" name="s" value="on"/><input class="search-submit" type="submit" value=""/></form></div></div><script>$('input[type=radio][name=search]').change(function() {
472
+ var val = $(this).val()
473
+ var self = '<div class="search-form"><input id="local-search-input" placeholder="站内搜索,首次慢" type="search" name="q" results="0"><input class="search-submit" type="submit" value=""/><div id="local-search-result"></div></div>'
474
+ var google = '<form class="search-form" action="//www.google.com/search" method="get" accept-charset="utf-8" target="_blank"><input type="search" name="q" maxlength="30" placeholder="谷歌全站搜索"><input type="hidden" name="sitesearch" value="xuehuayu.cn"><input class="search-submit" type="submit" value=""/></form>'
475
+ var baidu = '<form class="search-form" action="//www.baidu.com/baidu" method="get" accept-charset="utf-8" target="_blank"><input type="search" name="word" maxlength="30" placeholder="百度全站搜索"><input type="hidden" name="si" value="xuehuayu.cn"><input type="hidden" name="cl" value="3"><input type="hidden" name="ct" value="2097152"><input type="hidden" name="s" value="on"><input class="search-submit" type="submit" value=""/></form>'
476
+
477
+ if (val === 'self') {
478
+ $('#search').html(self)
479
+ var search_path = 'search.xml';
480
+ if (search_path.length == 0) {
481
+ search_path = 'search.xml';
482
+ }
483
+ var path = 'https://cdn.staticaly.com/gh/npljy/npljy.github.io/main/' + search_path;
484
+ searchFunc(path, 'local-search-input', 'local-search-result');
485
+ } else if (val === 'baidu') {
486
+ $('#search').html(baidu)
487
+ } else if (val === 'google') {
488
+ $('#search').html(google)
489
+ }
490
+ })</script><div class="widget widget-wxmp"><img alt="微信公众号" width="100%" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/mp-mini.jpg"/></div><div class="widget widget-categories"><div class="widget-title"><i class="fa fa-folder-o"> 分类</i></div><ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/CDN/">CDN</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/IDE/">IDE</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/git/">git</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/hexo/">hexo</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%85%AC%E5%85%B1%E8%8A%82%E6%97%A5/">公共节日</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%88%86%E4%BA%AB/">分享</a><span class="category-list-count">29</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%89%8D%E7%AB%AF/">前端</a><span class="category-list-count">191</span><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%89%8D%E7%AB%AF/%E6%B5%8F%E8%A7%88%E5%99%A8/">浏览器</a><span class="category-list-count">1</span><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%89%8D%E7%AB%AF/%E6%B5%8F%E8%A7%88%E5%99%A8/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/">网络协议</a><span class="category-list-count">1</span></li></ul></li></ul></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%8D%9A%E5%AE%A2/">博客</a><span class="category-list-count">3</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%B7%A5%E5%85%B7/">工具</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%B9%BF%E5%91%8A%E8%BF%87%E6%BB%A4/">广告过滤</a><span class="category-list-count">8</span><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%B9%BF%E5%91%8A%E8%BF%87%E6%BB%A4/%E8%A7%86%E9%A2%91%E7%94%B5%E8%A7%86%E5%B0%8F%E8%AF%B4%E6%BC%AB%E7%94%BB%E8%B5%84%E8%AE%AF%E9%9F%B3%E4%B9%90/">视频电视小说漫画资讯音乐</a><span class="category-list-count">2</span></li></ul></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E6%AD%A3%E5%88%99/">正则</a><span class="category-list-count">5</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E6%B5%8F%E8%A7%88%E5%99%A8/">浏览器</a><span class="category-list-count">5</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E7%AE%97%E6%B3%95/">算法</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E8%B5%84%E8%AE%AF/">资讯</a><span class="category-list-count">16</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E8%BD%BB%E6%9D%BE%E4%B8%80%E5%88%BB/">轻松一刻</a><span class="category-list-count">1</span></li></ul></div><div class="widget widget-tags"><div class="widget-title"><i class="fa fa-star-o"> 标签</i></div><div class="tagcloud"><a href="/tags/%E5%8E%9F%E5%88%9B/" style="font-size: 15px;">原创</a> <a href="/tags/%E8%BD%AC%E8%BD%BD/" style="font-size: 15px;">转载</a> <a href="/tags/%E6%89%8B%E5%86%99/" style="font-size: 15px;">手写</a> <a href="/tags/%E7%96%AB%E6%83%85/" style="font-size: 15px;">疫情</a> <a href="/tags/%E5%A8%B1%E4%B9%90/" style="font-size: 15px;">娱乐</a></div></div><div class="widget widget-recent-posts"><div class="widget-title"><i class="fa fa-file-o"> 最近文章</i></div><ul class="post-list"><li class="post-list-item"><a class="post-list-link" href="/article/c5576490.html">面试准备</a></li><li class="post-list-item"><a class="post-list-link" href="/article/84c9ccd6.html">精读《SolidJS》</a></li><li class="post-list-item"><a class="post-list-link" href="/article/53803e6.html">git提交注释规范</a></li><li class="post-list-item"><a class="post-list-link" href="/article/a4145266.html">前端数组拍平flat一行代码</a></li><li class="post-list-item"><a class="post-list-link" href="/article/bedea419.html">一道前端this面试题</a></li><li class="post-list-item"><a class="post-list-link" href="/article/bf7e7421.html">git多账号配置</a></li></ul></div><div class="widget widget-links"><div class="widget-title"><i class="fa fa-external-link"> 友情链接</i></div><ul></ul><a href="https://github.com/npljy?utm_source=xuehuayu.cn" title="GitHub" target="_blank">GitHub</a><ul></ul><a href="https://laonongmin.online?utm_source=xuehuayu.cn" title="看看" target="_blank">看看</a><ul></ul><a href="https://cainiaoblog.cn?utm_source=xuehuayu.cn" title="菜鸟博客" target="_blank">菜鸟博客</a><ul></ul><a href="mailto:cainiaoblog@126.com" title="友链联系" target="_blank">友链联系</a></div></div></div><div class="pure-u-1 pure-u-md-3-4"><div id="footer"><div class="flex-block justify-center align-center flex-wrap"><a class="gxba-link" id="gxba" rel="nofollow" target="_blank" href="http://beian.miit.gov.cn/">京ICP备20007647号-2</a><a class="gaba-link" id="gaba-link" rel="nofollow" target="_blank" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010802031264"><img class="nofancybox" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/gaba.png" alt=""/><span id="gaba">京公网安备 11010802031264号</span><span style="padding-right: 10px;"></span></a><span>Copyright © 2023 </span><a href="/." rel="nofollow">前端壹菜鸟. </a><script>(function(){
491
+ var cnb =window.location.origin.indexOf('cainiaoblog') !==-1
492
+ if (cnb) {
493
+ var gxba =document.getElementById('gxba')
494
+ var gaba =document.getElementById('gaba')
495
+ var gabaLink =document.getElementById('gaba-link')
496
+ gxba.innerText ='京ICP备20007647号-1'
497
+ gaba.innerText ='京公网安备 11010802031254号'
498
+ gabaLink.setAttribute('href','http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010802031254')
499
+ }
500
+ })()</script></div><div class="flex-block justify-center align-center flex-wrap"><a rel="nofollow" target="_blank" href="https://v6.51.la/s/Guz3lwHCsVme9Cu"><div class="busuanzi_container" id="busuanzi_container"><span class="busuanzi_container_site_pv" id="busuanzi_container_site_pv">访问量:<span id="busuanzi_value_site_pv"><i class="fa fa-spinner"></i></span></span><span class="busuanzi_container_site_uv" id="busuanzi_container_site_uv">访客数:<span id="busuanzi_value_site_uv"><i class="fa fa-spinner"></i></span></span><span style="padding-right: 10px;"></span></div></a><a rel="nofollow" target="_blank" href="https://www.upyun.com/?utm_source=lianmeng&amp;utm_medium=referral"><span style="font-weight:bold;letter-spacing: 1px;">本网站由 </span><img class="nofancybox" height="32" style="vertical-align: middle" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/upy_logo.min.svg" alt=""/><span style="font-weight:bold;letter-spacing: 1px;">提供CDN加速/云存储服务</span></a><span style="padding-right: 10px;"></span><a rel="nofollow" style="font-size:18px;font-weight:bold;vertical-align: middle" target="_blank" title="注册就送代金券可直接使用" href="https://console.upyun.com/register/?invite=HyDsjZHIL">注册</a></div></div></div></div><a class="show" id="rocket" href="#top"></a><div class="darkmode-toggle">🌓</div><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/totop.min.js" async></script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/dark.min.js" async></script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/codeblock-resizer.min.js"></script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/smartresize.min.js"></script></div></body></html>