1. 换行

  1. var text = '我咋这么帅';
  2. var str = text.split('').join('\n');
  3. console.log(str);
  4. console.log(document.getElementsByClassName('text')[0].innerText(str));

2.彩色打印

  1. console.log("%cauthor: youjin, 打印出来看看是啥", " text-shadow: 0 1px 0 #ccc,0 2px 0 #c9c9c9,0 3px 0 #bbb,0 4px 0 #b9b9b9,0 5px 0 #aaa,0 6px 1px rgba(0,0,0,.1),0 0 5px rgba(0,0,0,.1),0 1px 3px rgba(0,0,0,.3),0 3px 5px rgba(0,0,0,.2),0 5px 10px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.2),0 20px 20px rgba(0,0,0,.15);font-size:1.8em;");

3.快速数组

问题描述:在不使用循环的条件下,如何创建一个长度为100的数组,并且数组的每一个元素是该元素的下标?
结果为:

  1. [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
  • 方法一: Array.keys();

    1. var arr = new Array(100).keys();
    2. console.log(Array.from(arr));
  • 方法二: Array.from()

     

    1. var arr = Array.from({length:100}, (v,k) => k);
    2. console.log(arr);
  • 方法三: 使用…扩展运算符

    1. var arr = [...Array(100).keys()];
    2. console.log(arr);
  • 方法四: Object.keys() 与 Array.from()

    1. var arr = Object.keys(Array.from({length:100}));
    2. console.log(arr);
  • 这种方式创建的是一个字符串数组,所以需要转一下

    1. var arr = Object.keys(Array.from({length:100})).map(function(item){
    2. return +item;
    3. });
    4. console.log(arr);
  • +号是一个转换格式的小技巧,你也可以使用parseInt

    4.禁止打开控制台

  1. var ConsoleManager={
  2. onOpen:function(){
  3. console.log("Console is opened")
  4. },
  5. onClose:function(){
  6. console.log("Console is closed")
  7. },
  8. init:function(){
  9. var self = this;
  10. var x = document.createElement('div');
  11. var isOpening = false,isOpened=false;
  12. Object.defineProperty(x, 'id', {
  13. get:function(){
  14. if(!isOpening){
  15. self.onOpen();
  16. isOpening=true;
  17. }
  18. isOpened=true;
  19. }
  20. });
  21. setInterval(function(){
  22. isOpened=false;
  23. console.info(x);
  24. console.clear();
  25. if(!isOpened && isOpening){
  26. self.onClose();
  27. isOpening=false;
  28. }
  29. },200)
  30. }
  31. }
  32. ConsoleManager.onOpen = function(){
  33. //打开控制台,跳转到另一页,对火狐失效
  34. try{
  35. window.location = "about:blank";
  36. }catch(err){
  37. var a = document.createElement("button");
  38. a.onclick=function(){
  39. window.location = "about:blank";
  40. }
  41. a.click();
  42. }
  43. }
  44. ConsoleManager.onClose = function(){
  45. alert("Console is closed!!!!!")
  46. }
  47. ConsoleManager.init();
  48. // 监测浏览器宽度
  49. // (function(){
  50. // var h = 1080,w=1920;
  51. // window.onresize = function () {
  52. // if (h!= window.innerHeight||w!=window.innerWidth){
  53. // window.close();
  54. // window.location = "about:blank";
  55. // } else{
  56. // }
  57. // }
  58. // })()

5.位运算

  • 交换变量

    1. //写法一
    2. let a=1,b=2;
    3. a ^= b;
    4. b ^= a;
    5. a ^= b;// a=2 b=1
    6. // 写法二
    7. a = (b^=a^=b)^a; // a=2 b=1
  • 转换booblean

    1. !!~(['1','2']).indexOf('3');//false
    2. !!~(['1','2']).indexOf('1');//true

    按位操作符(Bitwise operators) 将其操作数(operands)当作32位的比特序列(由0和1组成),而不是十进制、十六进制或八进制数值。例如,十进制数9,用二进制表示则为1001。按位操作符操作数字的二进制形式,但是返回值依然是标准的JavaScript数值。

位运算符 名称 js内使用方式 操作作用 应用举例
& 按位与 a & b 对每对比特位执行与(AND)操作。只有两者互相对应的比特位都是 1 时,a & b的对应比特位才是 1 a&1 判断一个整数的奇偶
| 按位或 a | b 对每一对比特位执行或(OR)操作。如果两者互相对应的比特位中都至少有一个是 1,则a | b的对应比特位是 1。 a|1 把这个数强行变成最接近的偶数;
将任一数值 x 与 0 进行按位或操作,其结果都是 x;
将任一数值 x 与 -1 进行按位或操作,其结果都为 -1
^ 按位异或 a ^ b 对每一对比特位执行异或(XOR)操作。如果两者互相对应的比特位都不同,则a ^ b的对应比特位是 1。 两次异或同一个数最后结果不变 (a ^ b) ^ b = a
~ 按位取反 ~a 对每一个比特位执行非(NOT)操作。NOT a 结果为 a 的反转(即反码);
即把0和1全部取反
if (~str.indexOf(searchFor))
{
// searchFor 包含在字符串中
}
else
{
// searchFor 不包含在字符串中
}
<< 左移 a << b 将 a 的二进制形式向左移 b (< 32) 比特位,右边用0填充。
>> 带符号右移 a >> b 将 a 的二进制表示向右移 b (< 32) 位,丢弃被移出的位。 相当于a除以2的b次方(取整)
>>> 无符号右移 a>>> b 将 a 的二进制表示向右移b(< 32) 位,丢弃被移出的位,并使用 0 在左侧填充。

6.补零

来源

  • 代码实现 ```javascript /**
  • 自定义函数名:PrefixZero
  • @param num: 被操作数
  • @param n: 固定的总位数 */ function PrefixZero(num, n) { return (Array(n).join(0) + num).slice(-n); } ```
  • 具体示例 ```javascript var myNum = 9; var myNum2 = 12; console.log(‘原变量myNum:’+myNum);//9 console.log(‘处理后myNum:’+PrefixZero(myNum, 3));//009

console.log(‘原变量myNum2:’+myNum2); console.log(‘处理后myNum2:’+PrefixZero(myNum2, 3));//012 ```

  • 简要说明如下:
    • Array(5) => 创建了一个长度为5的空数组
      console.log(Array(5));// [empty × 5]
    • Array(5).join(0) => 用0拼接将数组转换成字符串
      console.log(Array(5).join(0));// 0000
    • Array(5).join(0)+91 => 通过+,实现字符串的拼接
      console.log(Array(5).join(0)+91);// 000091
    • (Array(5).join(0) + 91).slice(-5) => slice(startIndex,endIndex)方法,用于截取
      参数说明:
      参数是起始位置,含头不含尾,
      只有一个参数时,表示从该起始位置一直截取到最后。
      参数值为负数时,表示从后往前数,如最后一位,索引是-1

如此,.slice(-5)表示截取的是从后往前数5位一直到最后
console.log((Array(5).join(0) + 91).slice(-5));// 00091