Javascript
语言特性
函数式编程基础: https://zhuanlan.zhihu.com/p/111656554
HTTP请求:javascript/http-request
promis:javascript.promis
json转字符串:
字符串转对象(strJSON代表json字符串) var obj = eval(strJSON); var obj = strJSON.parseJSON(); var obj = JSON.parse(strJSON); json对象转字符串(obj代表json对象) var str = obj.toJSONString(); var str = JSON.stringify(obj) 运用时候需要除了eval()以外需要json.js包(切记哦)
JWT Inspector:JWT(JSON Web Token)通过安全可靠的方式传输数据。 当我们测试排查时,我们需要分析从浏览器接收到的JWT内容。token信息可能在URL, cookie或本地储存中。JWT Inspector是一款浏览器插件, 让我们可以从控制台或内置的界面解码JSON Web Token。你不需要在你的app中 跟踪token信息。你只需要按一下插件的按钮,JWT Inspector会自动展示你所需要的 所有信息,然后你可以复制其中任何token信息。
架构
模块化: javascript.module
异步调用:javascript.async
单元测试:https://zhuanlan.zhihu.com/p/323571051
库
不可变数据类型的库:Immutable.js
Debug工具库:javascript/3rdlib-debug
JQuery:jquery
AngularJs:angularjs
ExtJs:extjs
MathJax:javascript/mathJax
MathJax:javascript/mathJaxTest
reveal.js: reveal.js
impress.js:impress.js
手势操作: gesture.helper
Google Agent统计:ga.example
全javascript实现Web开发:javascript.full.webapp
hijk:hijk
puppeteer:puppeteer
express:express
react:react/index
运行环境
QuickJS:quickjs/index 非常好用的lua替代品
Java JJS:java-jjs
Node.js:nodejs
NodeJS的Stream:nodejs/stream
https://segmentfault.com/a/1190000011237265
https://jestjs.io/docs/en/tutorial-async
local storage
需求背景:两个页面 A、B,B 页面关闭时,通知 A 页面请求接口刷新列表页
实现
使用 storage 事件实现页面通信,约定好通信的 key,这里我们假定 key 为refresh_list
A 页面 监听 storage 事件
mounted() { window.addEventListener('storage', this.otherWindowListener, false); this.$on('hook:beforeDestroy', () => { window.removeEventListener('storage', this.otherWindowListener); }); }, methods: { otherWindowListener(event) { if (event.key === 'refresh_list'){ // do something }; }, },
B 页面,当保存时,设置约定好的 localStorage key 值,关闭页面
methods: { close() { localStorage.setItem('refresh_list', new Date().getTime()); try { window.close(); } catch (e) { console.log(e); } }, },
common.renderPagination = function(page, count, callbackName) { let i = 1; let html = '<ul class="pagination center">'; if (page === 1) { html = html + '<li><a class="disable" href="javascript:void(0);">«</a></li>' ; } else { html = html + '<li><a href="javascript:' + callbackName + '(' + (page - 1) + ');">«</a></li>' + '<li><a href="javascript:' + callbackName + '(' + i + ');">' + i + '</a></li>' ; } i = i + 1; if (page > 6) { i = page - 5; html = html + '<li><a class="disable" href="javascript:void(0);">...</a></li>'; } while (page > i) { html = html + '<li><a href="javascript:' + callbackName + '(' + i + ');">' + i + '</a></li>'; i = i + 1; } html = html + '<li class="active"><a href="javascript:void(0);">' + page + '</a></li>'; i = page + 1; if ((count - page) > 6) { while (i <= (page + 5)) { html = html + '<li><a href="javascript:' + callbackName + '(' + i + ');">' + i + '</a></li>'; i = i + 1; } i = count; html = html + '<li><a class="disable" href="javascript:void(0);">...</a></li>'; } while (i <= count) { html = html + '<li><a href="javascript:' + callbackName + '(' + i + ');">' + i + '</a></li>'; i = i + 1; } if (page === count) { html = html + '<li><a class="disable" href="javascript:void(0);">»</a></li>'; } else { html = html + '<li><a href="javascript:' + callbackName + '(' + (page + 1) + ');">»</a></li>'; } html = html + '</ul>'; return html; };