111

JavaScript 骚操作

 6 years ago
source link: https://juejin.im/post/59d2ebcbf265da06516729b8
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

如有错误,欢迎批评指正!

技术无极限,唯一的限制是你的想象力!

在JavaScript世界中,有些操作会让你无法理解,但是却无比优雅。比如下面这些:

5种方式实现值交换

下面几种方式都行

1. var temp = a; a = b; b = temp; (传统,但需要借助临时变量)
2. a ^= b; b ^= a; a ^= b; (需要两个整数)
3. b = [a, a = b][0] (借助数组)
4. [a, b] = [b, a]; (ES6,解构赋值)
5. a = a + b; b = a - b; a = a - b; (小学奥赛题)复制代码

去掉小数部分

下面几种方式都行

parseInt(num)
~~num
num >> 0
num | 0复制代码

判断 x 是否是整数

下面几种方式都行

function isInt(x) {
  return (x ^ 0) === x
}
// return Math.round(x) === x
// return (typeof x === 'number') && (x % 1 === 0)
// ES6 -> Number.isInteger()复制代码

递归求阶乘

function factorial(n) {
  return (n > 1) ? n * f(n - 1) : n
}复制代码

判断符号是否相同

function sameSign(a, b) {
  return (a ^ b) >= 0
}复制代码
arr.slice(0)复制代码
// ES6
Array.from(new Set(arr))

// ES5
arr.filter(function(ele, index, array){
    return index===array.indexOf(ele)
})复制代码

数组最大值

function maxArr(arr) {
  return Math.max.apply(null, arr)
}复制代码

数组最小值

function minArr(arr) {
  return Math.min.apply(null, arr)
}复制代码

随机获取数组的一个成员

function randomOne(arr) {
  return arr[Math.floor(Math.random() * arr.length)]
}复制代码

产生随机颜色

function getRandomColor() {
    return `#${Math.random().toString(16).substr(2, 6)}`
}复制代码

随机生成指定长度的字符串

function randomStr(n) {
  let standard = 'abcdefghijklmnopqrstuvwxyz9876543210'
  let len = standard.length
  let result = ''

  for (let i = 0; i < n; i++) {
    result += standard.charAt(Math.floor(Math.random() * len))
  }

  return result
}复制代码
JSON.parse(JSON.stringify(obj))复制代码

打印出来看看

console.log(([][[]] + [])[+!![]] + ([] + {})[!+[] + !![]])

console.log((!(~+[]) + {})[--[~+''][+[]] * [~+[]] + ~~!+[]] + ({} + [])[[~!+[]] * ~+[]])复制代码

美化console

console.info("%c哈哈", "color: #3190e8; font-size: 30px; font-family: sans-serif");复制代码

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK