多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] # 格式化Date 想得到format后的时间?现在不用再get年月日时分秒了,三步搞定 ```js var temp = new Date(); var regex = /\//g; (temp.toLocaleDateString() + ' ' + temp.toLocaleTimeString().slice(2)).replace(regex,'-'); // "2015-5-7 9:04:10" ``` 想将format后的时间转换为时间对象?直接用Date的构造函数 ```js new Date("2015-5-7 9:04:10"); // Thu May 07 2015 09:04:10 GMT+0800 (CST) ``` 经测试发现火狐没法对format后的时间字符串使用`Date.parse()`,故这个方法在火狐上不好使 想将一个标准的时间对象转换为unix时间戳?`valueOf`搞定之 ```js (new Date).valueOf(); // 1431004132641 ``` 许多朋友还提醒了这样可以快速得到时间戳 ```js +new Date // 1431004132641 ``` # 一元加 一元加可以快速将字符串的数字转换为数学数字,即 ```js var number = "23" typeof number // string typeof +number // number ``` 可以将时间对象转为时间戳 ```js new Date // Tue May 12 2015 22:21:33 GMT+0800 (CST) +new Date // 1431440459887 ``` # 转义URI 需要将url当做参数在路由中传递,现在转义之 ```js var url = encodeURIComponent('http://segmentfault.com/questions/newest') // "http%3A%2F%2Fsegmentfault.com%2Fquestions%2Fnewest" ``` 再反转义: ```js decodeURIComponent(url) // "http://segmentfault.com/questions/newest" ``` # toFixed 希望保留小数点后的几位小数,不用再做字符串截取了,`toFixed`拿走 ```js number.toFixed() // "12346" number.toFixed(3) // "12345.679" number.toFixed(6) // "12345.678900" ``` 参数范围为`0~20`,不写默认`0` *** Xee:这里其实它有时候的结果并不是我们需要的: 例如: ```js Number((1.005).toFixed(2)); // 1 instead of 1.01 Math.round(1.005*100)/100; // 1 instead of 1.01 ``` 更好的方案: ```js function round(value, decimals) { return Number(Math.round(value+'e'+decimals)+'e-'+decimals); } round(1.005, 2); // 1.01 ``` [`Rounding Decimals in JavaScript`](http://www.jacklmoore.com/notes/rounding-in-javascript/) # JS中的`~~` 今天在一代码中到这样一句: `~~(Math.random() * 2e3)` 其中的代码上用到了位运算符~(按位非),在平时的编程中很少用到位运算符,只是学习编程基础的时候看到过,也没多做了解,既然现在遇到了,就打算对这一运算符一探究竟。 其实上面那一段代码用可读性强的方式来写的话,如下面 `parseInt(Math.random()*2e3)` 那为什么使用~~能实现parseInt取整的效果呢? 《Javascript权威指南》里是这么说的: 位运算符"~"是一元运算符,位于一个整型参数之前,它将操作数的所有位取反。根据javascript中所带符号的整数的表示方法,对一个值使用"~",运算符相当于改变它的符号并减1。例如`~0x0F = 0xFFFFFFF0或-16。` 请注意,上面的句子中提到的是所带符号的整数!那么也就是说~9.88只是取整数部分,也即是~9。 根据上面的描述,使用~相当于改变参数的符号并减1,那么也就是: ~~~ ~9 => -9 - 1 => -10 然而,使用两个~,那么就是相当于boolean中的!!一样,只是!!返回的是布尔类型,~~返回的是原来的值,如果参数是小数的话,就相当于对该参数取整! ~~~ # 复杂的if-else 今天在写一个代码的时候,发现在我们的代码里有一个很复杂的if-else语句——主要是在开发的过程中,业务在不断地变化。 ```js function categoryHandleRefactor(category) { var categoryAction = { 'A': { run: function () { console.log('A') } }, 'B': { run: function () { console.log('B') } }, 'C': { run: function () { console.log('C') } }, 'D': { run: function () { console.log('D') } } }; categoryAction[category].run(); } ``` # [Array.prototype.slice](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/slice) `Array.prototype.slice.call(arguments)`能将类数组(Array-like)对象/集合转换成一个新数组。可以简单的使用 `[].slice.call(arguments)` 来代替 如: ```js var unboundSlice = Array.prototype.slice; var slice = Function.prototype.call.bind(unboundSlice); function list() { return slice(arguments); } var list1 = list(1, 2, 3); // [1, 2, 3] ``` ## [前端小知识10点(2020.2.10)](https://mp.weixin.qq.com/s/tt2XcW4GF7oBBZOPwTiCcg)