JS 中的神操作

xxx.png

加号的操作

1
2
3
4
5
6
console.log(1+'32');
// 132
console.log(1+ +'32');
// 33
+[]
// 0

加号的操作有很多的妙用,等待你的探索。


swap 交换

1
2
3
4
5
6
7
8
9
10
var x = 1;
var y = 2;
[x, y] = [y, x]
console.log(x + ' ' + y)
// 2 1
x ^= y;
y ^= x;
x ^= y;
console.log(x + ' ' + y)
// 1 2

Console 输出

1
console.info("%cHello World!", "color: #3190e8; font-size: 30px; font-family: sans-serif");

特殊字符

1
2
3
4
console.log((!(~+[])+{})[--[~+""][+[]]*[~+[]]+~~!+[]]+({}+[])[[~!+[]]*~+[]])
// sb
console.log(([][[]] + [])[+!![]] + ([] + {})[!+[] + !![]])
// nb

运算符能输出字符,这其中跟JS 中的运算符优先级和字符强转类型有关!


取整

1
2
3
4
5
6
7
8
var x = 43.210
// 43.210
console.log(~~x)
// 43
console.log(X | 0)
// 43
console.log(x >> 0)
// 43

True/Flase

1
2
3
4
console.log(!0)
// true
console.log(!1)
// false

数组去重

1
2
3
var arr = [1, 2, 3, 4, 5, 6, 6, 6]
[...new Set(arr)]
// [1, 2, 3, 4, 5, 6]

JS中的 … 你可以把它理解为解构或者展开


键盘

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
(_=>[..."`1234567890-=~~QWERTYUIOP[]\\~ASDFGHJKL;'~~ZXCVBNM,./~"].map(x=>(o+=`/${b='_'.repeat(w=x<y?2:' 667699'[x=["BS","TAB","CAPS","ENTER"][p++]||'SHIFT',p])}\\|`,m+=y+(x+' ').slice(0,w)+y+y,n+=y+b+y+y,l+=' __'+b)[73]&&(k.push(l,m,n,o),l='',m=n=o=y),m=n=o=y='|',p=l=k=[])&&k.join``)()
/*
____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ________
|| |||1 |||2 |||3 |||4 |||5 |||6 |||7 |||8 |||9 |||0 |||- |||= |||BS ||
||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||______||
|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/______\|
________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____
||TAB |||Q |||W |||E |||R |||T |||Y |||U |||I |||O |||P |||[ |||] |||\ ||
||______|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__||
|/______\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|
_________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ________
||CAPS |||A |||S |||D |||F |||G |||H |||J |||K |||L |||; |||' |||ENTER ||
||_______|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||______||
|/_______\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/______\|
___________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ___________
||SHIFT |||Z |||X |||C |||V |||B |||N |||M |||, |||. |||/ |||SHIFT ||
||_________|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||_________||
|/_________\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/_________\|
*/

数组最大值/最小值

1
2
3
4
5
var arr = [1, 2, 3, 4, 5]
Math.max(...arr)
// 5
Math.min(...arr)
// 1

字符串的长度

1
2
3
4
5
6
7
8
9
10
"𠮷祥".length
// 3

"\u{20BB7}"
// 𠮷 -> 这种表示法只限于码点在\u0000~\uFFFF之间的字符。超出这个范围的字符,必须用两个双字节的形式表示。

"\uD842\uDFB7"
// 𠮷

// 由于\u20BB是一个不可打印字符,所以只会显示一个空格,后面跟着一个7。

遍历数组返回布尔值

1
new Array(2).every(e => e) // true

1.png


很大数字的简便写法

1
2
let x = 123_456_7
x // 1234567

引用


个人备注

此博客内容均为作者学习所做笔记,侵删!
若转作其他用途,请注明来源!