设为首页 收藏本站
查看: 972|回复: 0

JavaScript一些实用的技巧

[复制链接]
累计签到:224 天
连续签到:4 天
发表于 2019-11-26 11:54:39 | 显示全部楼层 |阅读模式
最近看了很多开源项目的源码,感觉学到了不少东西,也学到了很多比较碎的技巧。JavaScript小技巧实在是太多,把这些小技巧和之前知道的一起总结一下,并且持续更新,权当是备忘。

this.length >>> 0

无符号右移运算,该操作常见于数组遍历,比如玉伯曾经发布的es5-safe模块里面有大量的该操作。作用是确保.length 是一个0到2^32的正整数

所有非数字的被转换成0
-1 转换成 0
负数转换成正整数
浮点数相当于执行Math.floor
1
2
3
4
5
6
7
8
9
10
11
1>>>0            === 1
-1>>>0           === 0xFFFFFFFF          -1>>0    === -1
1.7>>>0          === 1
0x100000002>>>0  === 2
1e21>>>0         === 0xDEA00000          1e21>>0  === -0x21600000
Infinity>>>0     === 0
NaN>>>0          === 0
null>>>0         === 0
'1'>>>0          === 1
'x'>>>0          === 0
Object>>>0       === 0
~index

在查找某字符串或者数组元素在字符串或者数组里面的索引时,如果不存在index都为-1, 这个时候用~index 如果index为 -1 会被转换成0, 相当于false

1
2
3
4
5
6
var idx = str.indexOf('a');
if(idx > -1){
        doSomething();
}
(idx > -1) && doSomething();
~idx && doSomething()
void 0

void 0 是用来替换undefined的, 由于undefined在JavaScript中并非关键字, 我们可以直接给undefined赋值从而修改了undefined,由此来看undefined并不安全。 void 0 实际上总是返回undefined值,所以更加安全,而且相对来说也更加短,节省字符数。

1
undefined = 123; //undefined 可以被赋值
(0,eval)(‘this’)

先上代码

1
2
3
var _global = (function(){
        return this || (0,eval)("this");
}());
用于获取全局对象, 可以兼容浏览器和Node.js, 严格模式和非严格模式。
this 在非严格模式下在浏览器端指向window,在Node.js里面指向global或者GLOBAL (Node.js源码里面这样写的 global = this;global.GLOBAL = global; ),
可是在严格模式下this却是undefined。
而(0,eval)(“this”) 总是能够返回全局对象, 那么为什么不直接调用eval(‘this’)呢?

1
2
3
4
5
6
var x = 'outer';
(function() {
  var x = 'inner';
  eval('console.log("直接调用 Eval:" + x)');
  (1,eval)('console.log("间接调用Eval: " + x)');
})();
直接调用 Eval:inner
间接调用Eval: outer

所以如果直接调用的话可能会返回当前作用域this。

Date格式化

经常会遇到需要格式化日期时间为 yyyy-MM-dd HH:mm:ss格式,这里有种比较简单的方法

1
2
3
var date = new Date();
var result = date.toLocaleString('zh-CN', { hour12: false })
  .replace(/\//g, '-').replace(/\b\d\b/g, '0$&');
取月份天数

1
new Date(year, month + 1, 0).getDate();
new Date()第三个参数为0 ,并且month 为 month + 1 是返回的是当前month的最后一天,即是月份的天数。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-988950-1-1.html 上篇帖子: 浅谈基于html5的拖拽 下篇帖子: H5新属性实现图片压缩上传
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表