Javascript你可能不知道的小技巧

将一个小数(或者小数字符串)快速的取整,你第一反应是什么? Math?NO.NO.NO...现在我们可以这么做:

var num='1234.5678';
//常规做法
console.log(Math.floor(num));
//逼格做法
console.log(num|0);
//逼格做法
console.log(num^0);
//逼格做法
console.log(~~num);

其实就是利用到了js的类型自动转换和位运算,因为是用位运算的技巧,所以这个值不能很大,如果数值过大请还是使用Math。

说到自动类型转换,又想到一个小技巧。

日期类型取数值

你能想到的可能是date.getTime(),其实完全不用:

var d = new Date();
//常规做法
console.log(d.getTime());
//逼格做法
console.log(+d);

js生成漂亮的随机码

console.log(Math.random().toString(16).substring(2));
console.log(Math.random().toString(36).substring(2));

js生成指定长度的随机码

function generateRandomAlphaNum(len) {
var rdmStr = '';
for( ;rdmStr.length < len; rdmStr  += Math.random().toString(36).substr(2));
return  rdmStr.substr(0, len);
}

js 两个对象交换值

var a = 'a',b='b';
//常规做法
var tmp = a;
a=b
b=tmp
//逼格做法
a= [b, b=a][0];

当然如果是交换两个数字的话,还可以使用异或:

var a = 123,b=456;
a=a^b;
b=b^a;
a=a^b;

判断IE8以及IE8以下

var _oldie = !+[1,];
if(_oldie){
alert('你的浏览器为IE8或以下版本');
}else{
alert('您的浏览器为现代浏览器(IE9或以上)');
}

js的短路语法

这个相信应该很多人都知道,就是:

var a = b && 1;
相当于

if (b) {
a = 1
}
而

var a = b || 1;
相当于

if (b) {
a = b;
} else {
a = 1;
}

在使用js代码压缩工具的时候,经常可以看到类似的语法。