MeetinaXD
@admin

汇总了一些在用JavaScript开发过程中遇到的各种奇技淫巧,分享给大家,避免在遇到这些问题的时候一脸懵不知所措。

使用await和promise延时

const delay = ms => new Promise(resolve => setTimeout(resolve, ms));
await delay(500)

使用一元运算符立即执行函数

一般的立即执行函数是这样子的

(function(){console.log("氦")})()

现在你可以这样做

!function(){console.log("氦")}()

效果一致,还省去了括号包裹的烦恼!
原理:
立即执行函数依靠将匿名函数anonymous function变为表达式实现,
那么可以使得后面的语句变成表达式的运算符都可以做到,在+-*/!~!!中任选一款,总有一款适合你~

区别是语句执行后的运算结果,可以自己试试看!

快速取整

不会吧不会吧不会真的还有人不知道这个技巧吧?
使用两次位取反:

const a = 8.12345
console.log(~~8.12345)
console.log(~~a)

输出:

这个也可以作为转换为整数使用,效果等同于Math.floor()(吧)

务必仅在对输入无比自信时使用……

使用arguments.callee实现匿名函数递归

例如想做一个递归的求阶乘:

function foo(i){
  if(i) i = i * foo(i-1)
  return !i? 1: i
}

foo(4) //24

我非要做成匿名的,那我可以这么做:

+function(i){
  if(i) i = i * arguments.callee(i-1)
  return !i? 1: i
}(4) //24
记得要用一元正负号哦~

使用Javascript的特性实现加密编码

关于这个技巧,我 创建了一个将js代码转换的编译器的项目,地址:Javascript Brainfuck


如以下代码:

(!(~+[])+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~+[]]

将得到以下结果:

这是利用了Javascript的特性实现的,也许你见过以下这张关于js的梗图:

不会吧不会真的有人没看过吧

其中,如[]+{}的表达式输出[object Object]的规则,则是实现加密编码的关键。
使用数组下标的形式,可以当作普通的字符使用,如([]+{}+[])[1]则可以访问到字符o。灵活使用表达式,可以将数字消除,如使用+[]或者~+[]+~~!+[]代替数字0,使用~~!+[]代替数字1,使用位取反产生负数(~~0-1
这样,就可以将正常的代码转换为下面这种类型:

左边为转换前的代码
甚至,还可以插入到正常的代码中,成为核心工程师:

感兴趣可以去看看项目!

使用constructor()实现执行string类型的js代码

这个技巧适合配合上面的食用,如图……

效果如eval(),但不同的是constructor会返回一个匿名函数,eval则是创建完匿名函数后直接执行。

这个特性对于Array Object Number都是适用的
下午9:44 · 2021年03月03日
1691
3
3
发表留言

    sheldon
    3年前

    你啊,迟早畀人**

    kk
    3年前

    太强了太强了OωO

    3年前

    JavaScript brain fuck
    看完之后我也说出了一句fuck
    太强了

编程
JavaScript的奇技淫巧
汇总了一些在用JavaScript开发过程中遇到的各种奇技淫巧,分享给大家,避免在遇到这些问题的时候一脸懵不知所措。使用await和prom...
扫描右侧二维码继续阅读
March 3, 2021
My Codes
blogger
meetinaxd
喜欢猪🐗
mylesson 作者
alovajs core dev
本质是一条野猪
你知道吗?

每吃一只卤🐽,就会有一条野猪失去它的鼻子
上方可以切换日夜模式

统计
文章:28 篇
分类:4 个
评论:5 条
运行时长:4年279天
by yoniu.
My Codes