JS骚操作写法和控制台console的高级玩法

三元操作符
使用三元操作符可以让你的if…else多行语句变成一行

简化前:

const x = 20;
let answer;

if (x > 10) {
    answer = "greater than 10";
} else {
    answer =  "less than 10";
}

简化后:

const answer = x > 10 ? "greater than 10" : "less than 10";

短路操作符
当进行变量赋值的时候,你可能需要确保被用来赋值的变量不是null、undefined或者为空。

简化前:

if (variable1 !== null || variable1 !== undefined || variable1 !== '') {
     let variable2 = variable1;
}

简化后:

const variable2 = variable1  || 'new';

是不是感觉难以置信 ,试一试下面的代码:

let variable1;
let variable2 = variable1  || 'bar';
console.log(variable2 === 'bar'); // prints true

variable1 = 'foo';
variable2 = variable1  || 'bar';
console.log(variable2); // prints foo

需要注意的是,如果 varibale1 的值为 false 或者是 0 ,则 ‘bar’ 将会被赋值给 varibale2.

声明变量
简化前:

let x;
let y;
let z = 3;

简化后:

let x, y, z=3;

if判断是否存在
简化前:

let a;
if ( a !== true ) {
// do something...
}

简化后:

let a;
if ( !a ) {
// do something...
}

for 循环
简化前:

const fruits = ['mango', 'peach', 'banana'];
for (let i = 0; i < fruits.length; i++)

简化后:

for (let fruit of fruits)

如果你想得到数组元素的下标,你可以这样子写:

for (let index in fruits)

当你用这种方法获取对象的key时仍然有效

const obj = {continent: 'Africa', country: 'Kenya', city: 'Nairobi'}
for (let key in obj)
  console.log(key) // output: continent, country, city

对象属性
简化前:

const x = 1920, y = 1080;
const obj = { x:x, y:y };

简化后:

const obj = { x, y };
return

简化前:

function calcCircumference(diameter) {
  return Math.PI * diameter
}

简化后:

calcCircumference = diameter => (
  Math.PI * diameter;
)

参数是默认值
简化前:

function volume(l, w, h) {
  if (w === undefined)
    w = 3;
  if (h === undefined)
    h = 4;
  return l * w * h;
}

简化后:

volume = (l, w = 3, h = 4 ) => (l * w * h);

volume(2) //output: 24

模板文本
简化前:

const welcome = 'You have logged in as ' + first + ' ' + last + '.'

const db = 'http://' + host + ':' + port + '/' + database;

简化后:

const welcome = `You have logged in as ${first} ${last}`;

const db = `http://${host}:${port}/${database}`;

解构赋值
简化前:

const observable = require('mobx/observable');
const action = require('mobx/action');
const runInAction = require('mobx/runInAction');

const store = this.props.store;
const form = this.props.form;
const loading = this.props.loading;
const errors = this.props.errors;
const entity = this.props.entity;

简化后:

import { observable, action, runInAction } from 'mobx';

const { store, form, loading, errors, entity } = this.props;

你甚至可以在解构的同时对变量重新命名:

const { store, form, loading, errors, entity:contact } = this.props;

… 运算符
简化前:

// joining arrays
const odd = [1, 3, 5];
const nums = [2 ,4 , 6].concat(odd);

// cloning arrays
const arr = [1, 2, 3, 4];
const arr2 = arr.slice()

简化后:

// joining arrays
const odd = [1, 3, 5 ];
const nums = [2 ,4 , 6, ...odd];
console.log(nums); // [ 2, 4, 6, 1, 3, 5 ]

// cloning arrays
const arr = [1, 2, 3, 4];
const arr2 = [...arr];

你还可以使用 …运算符在一个数组的任意位置去嵌入另一个数组:

const odd = [1, 3, 5 ];
const nums = [2, ...odd, 4 , 6];

… 和 es6 的解构赋值一起使用也很强大

const { a, b, ...z } = { a: 1, b: 2, c: 3, d: 4 };
console.log(a) // 1
console.log(b) // 2
console.log(z) // { c: 3, d: 4 }

Array.find
简化前:

const pets = [
  { type: 'Dog', name: 'Max'},
  { type: 'Cat', name: 'Karl'},
  { type: 'Dog', name: 'Tommy'},
]

function findDog(name) {
  for(let i = 0; i<pets.length; ++i) {
    if(pets[i].type === 'Dog' && pets[i].name === name) {
      return pets[i];
    }
  }
}

简化后:

pet = pets.find(pet => pet.type ==='Dog' && pet.name === 'Tommy');
console.log(pet); // { type: 'Dog', name: 'Tommy' }

指数幂
简化前:

Math.pow(2,3); // 8
Math.pow(2,2); // 4
Math.pow(4,3); // 64

简写后:

2**3 // 8
2**4 // 4
4**3 // 64

字符串转数字
简化前:

const num1 = parseInt("100");
const num2 =  parseFloat("100.01");

简化后:

const num1 = +"100"; // converts to int data type
const num2 =  +"100.01"; // converts to float data type

Object.entries()
这是一个 es8 中出现的特性,允许你把一个对象转换成具有键值对的数组。

const credits = { producer: 'John', director: 'Jane', assistant: 'Peter' };
const arr = Object.entries(credits);
console.log(arr);

/** Output:
[ [ 'producer', 'John' ],
  [ 'director', 'Jane' ],
  [ 'assistant', 'Peter' ]
]
**/

Object.values()
Object.values() 同样是 es8 里面出现的一个新特性,它和 Object.entries() 功能类似,但是在最终的转换数组中没有 key。

const credits = { producer: 'John', director: 'Jane', assistant: 'Peter' };
const arr = Object.values(credits);
console.log(arr);

/** Output:
[ 'John', 'Jane', 'Peter' ]
**/

下面我们用console.log来替换,感受一下它的魅力。

在这里插入图片描述
看了上面这张图,是不是认识到log的强大之处了,下面我们来看看console里面具体提供了哪些方法可以供我们平时调试时使用。

在这里插入图片描述

一般情况下我们用来输入信息的方法主要是用到如下四个

  1. console.log 用于输出普通信息
  2. console.info 用于输出提示性信息
  3. console.error用于输出错误信息
  4. console.warn用于输出警示信息
  5. console.debug用于输出调试信息

用图来说话

在这里插入图片描述
console对象的上面5种方法,都可以使用printf风格的占位符。不过,占位符的种类比较少,只支持字符(%s)、整数(%d或%i)、浮点数(%f)和对象(%o)四种。

console.log("%d年%d月%d日",2011,3,26);
console.log("圆周率是%f",3.1415926);

在这里插入图片描述

%o占位符,可以用来查看一个对象内部情况

var dog = {};dog.name = "大毛";dog.color = "黄色";console.log("%o", dog);

在这里插入图片描述
console.dirxml用来显示网页的某个节点(node)所包含的html/xml代码

<body>
    <table id="mytable">
        <tr>
            <td>A</td>
            <td>A</td>
            <td>A</td>
        </tr>
        <tr>
            <td>bbb</td>
            <td>aaa</td>
            <td>ccc</td>
        </tr>
        <tr>
            <td>111</td>
            <td>333</td>
            <td>222</td>
        </tr>
    </table>
</body>
<script type="text/javascript">
    window.onload = function () {
        var mytable = document.getElementById('mytable');
        console.dirxml(mytable);
    }
</script>

在这里插入图片描述

console.group输出一组信息的开头

console.groupEnd结束一组输出信息

看你需求选择不同的输出方法来使用,如果上述四个方法再配合group和groupEnd方法来一起使用就可以输入各种各样的不同形式的输出信息。

在这里插入图片描述

console.assert对输入的表达式进行断言,只有表达式为false时,才输出相应的信息到控制台在这里插入图片描述

console.count(这个方法非常实用哦)当你想统计代码被执行的次数

在这里插入图片描述

console.dir(这个方法是我经常使用的 可不知道比for in方便了多少)直接将该DOM结点以DOM树的结构进行输出,可以详细查对象的方法发展等等

在这里插入图片描述

console.time 计时开始

console.timeEnd 计时结束(看了下面的图你瞬间就感受到它的厉害了)

在这里插入图片描述

console.profile和console.profileEnd配合一起使用来查看CPU使用相关信息

在这里插入图片描述

在Profiles面板里面查看就可以看到cpu相关使用信息

在这里插入图片描述

console.timeLine和console.timeLineEnd配合一起记录一段时间轴

console.trace 堆栈跟踪相关的调试

上述方法只是我个人理解罢了。如果想查看具体API,可以上官方看看,具体地址为:https://developer.chrome.com/devtools/docs/console-api

控制台的一些快捷键

  1. 方向键盘的上下键,大家一用就知晓。比如用上键就相当于使用上次在控制台的输入符号

  2. $_命令返回最近一次表达式执行的结果,功能跟按向上的方向键再回车是一样的

上面的$_需要领悟其奥义才能使用得当,而0~0 4则代表了最近5个你选择过的DOM节点。

什么意思?在页面右击选择审查元素,然后在弹出来的DOM结点树上面随便点选,这些被点过的节点会被记录下来,而$0会返回最近一次点选的DOM结点,以此类推,$1返回的是上上次点选的DOM节点,最多保存了5个,如果不够5个,则返回undefined

在这里插入图片描述

  1. Chrome 控制台中原生支持类jQuery的选择器,也就是说你可以用$加上熟悉的css选择器来选择DOM节点
    在这里插入图片描述

4、copy通过此命令可以将在控制台获取到的内容复制到剪贴板

在这里插入图片描述

(哈哈 刚刚从控制台复制的body里面的html可以任意粘贴到哪, 比如记事本, 是不是觉得功能很强大)

  1. keys和values前者返回传入对象所有属性名组成的数据,后者返回所有属性值组成的数组

在这里插入图片描述

说到这,不免想起console.table方法了

  1. monitor & unmonitor

monitor(function),它接收一个函数名作为参数,比如function a,每次a被执行了,都会在控制台输出一条信息,里面包含了函数的名称a及执行时所传入的参数。

而unmonitor(function)便是用来停止这一监听。

在这里插入图片描述

看了这张图,应该明白了,也就是说在monitor和unmonitor中间的代码,执行的时候会在控制台输出一条信息,里面包含了函数的名称a及执行时所传入的参数。当解除监视(也就是执行unmonitor时)就不再在控制台输出信息了。

  • $ // 简单理解就是 document.querySelector 而已。
  • $$ // 简单理解就是 document.querySelectorAll 而已。
  • $_ // 是上一个表达式的值
  • 0-0−4 // 是最近5个Elements面板选中的DOM元素,待会会讲。
  • dir // 其实就是 console.dir
  • keys // 取对象的键名, 返回键名组成的数组
  • values // 去对象的值, 返回值组成的数组

下面看一下console.log的一些技巧

  • 重写console.log 改变输出文字的样式

在这里插入图片描述

  • 利用控制台输出图片

在这里插入图片描述

  • 指定输出文字的样式
    在这里插入图片描述

最后说一下chrome控制台一个简单的操作,如何查看页面元素,看下图就知道了

在这里插入图片描述

你在控制台简单操作一遍就知道了,是不是觉得很简单!


告诫自己,即使再累也不要忘记学习,成功没有捷径可走,只有一步接着一步走下去。 共勉!

以上来源于:

https://zhuanlan.zhihu.com/p/111457373
https://segmentfault.com/a/1190000002511877

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值