js神奇的写法

本篇总结了实践中用到的一些js trick,有些并非作者原创,但是作者都亲身坐过实验,效果奇佳。

数组浅复制
1
2
newArr = oldArr.concat([]);
newArr = oldArr.slice(0);
Function直接执行
1
2
3
4
'alert("hello")'.replace(/.+/,eval); 
'alert("hello")'.replace(/.+/,function(m){
new Function(m)();
});

new Function(arg1,arg2,…argN,’body’)();
参数都是字符串类型,字符串里面的内容是js表达式。只有一个参数时,将该字符串里面的内容作为函数体的原生js代码执行,相当于eval;
/.+/匹配的是除回车之外的字符;
string.replace(regexp,replacement),replacement可以是function,作用于每个匹配到的字符

拼接字符串
1
2
var i = 0; eval(new Array(101).join('alert(++i);'));
var i = 0; new Function(new Array(101).join('alert(++i);'))();

通过new Array(n)我们可以创建n个空元素,n个空元素之间存在n-1个空白,通过arr.join()可以在空白中放一些东西组成我们需要的字符串

浏览器变成编辑器
1
2
//浏览器地址栏输入
data:text/html,<html contenteditable>
文档可编辑
1
2
//console输入
document.body.contentEditable = 'true'
整数的操作
1
2
var foo = (12.4 / 4.13) | 0
var foo2 = ~~(12.4 / 4.13)
将值很快转为bool
1
!!windoww === true;
函数的返回
1
2
3
4
//无返回值,默认为undefined,!undefined = true
!(function(){alert("aaa")})() //true
!(function(){alert("aaa")}())//true
1 && function(){return true}()//true