英文 | https://medium.com/@aidan.hallett/7-javascript-quick-tricks-8f9a73671590

翻译 | 杨小爱

1、控制台对象方法

虽然 console.log 几乎在每个代码库中都无处不在,但实际上还有很多其他方法可以在控制台对象上调用。

想要在表格中显示您的数组或对象,可以使用 console.table()。

const users = [ { "first_name":"Harcourt","last_name":"Huckerbe","gender":"Male","city":"Linchen","birth_country":"China"},{ "first_name":"Allyn","last_name":"McEttigen","gender":"Male","city":"Ambelókipoi","birth_country":"Greece"},{ "first_name":"Sandor","last_name":"Degg","gender":"Male","city":"Mthatha","birth_country":"South Africa"}
]
console.table(users, ['first_name', 'last_name', 'city']);
┌─────────┬────────────┬─────────────┬───────────────┐
│ (index) │ first_name │  last_name  │     city      |├─────────┼────────────┼─────────────┼───────────────┤
│    0    │ 'Harcourt' │ 'Huckerbe'  │   'Linchen'   │
│    1    │  'Allyn'   │ 'McEttigen' │ 'Ambelókipoi' │
│    2    │  'Sandor'  │   'Degg'    │   'Mthatha'   │
└─────────┴────────────┴─────────────┴───────────────┘

您可以只使用一个或多个参数调用 console.table() 。您可以自定义要查看的列。

什么时候需要那个定时器功能?想知道一段代码需要多少时间?你可以使用console.time() & console.timeEnd()

您可以通过传入一个字符串来命名每个计时器实例。

console.time("timer1");
console.time("timer2");
setTimeout(() => {console.timeEnd("timer1");
}, 1000);
// Output: 'timer1: 1005.445ms'setTimeout(() => {console.timeEnd("timer2");
}, 2000);
// Output: 'timer2: 2005.025ms'

想知道您控制台记录了多少次内容?就可以使用console.count(),示例如下:

console.count('Hello');
// Hello: 1
console.count('Hello');
// Hello: 2
console.count('Hello');
// Hello: 3

仅在某些内容为假时才打印?就可以使用console.assert()。

const age = 19;
console.assert(age > 17, "User is unable to drive");
// No logs
console.assert(age > 21, "User is below 21");
// Assertion failed: User is below 21

2、array.sort()

我最近参与了一个项目,我们需要根据对象的类别以特定顺序对数组中的对象进行排序。例如;如果我们想按食品类别订购超市购物狂欢中的食品,我们可以使用这种排序方法轻松完成。

const order = ["MEAT", "VEGETABLES", "FRUIT", "SNACKS"];
const items = [{ name: "peppers", type: "VEGETABLES", price: 2.39 },{ name: "apples", type: "FRUIT", price: 3.99 },{ name: "chocolate", type: "SNACKS", price: 3.45 },{ name: "pork", type: "MEAT", price: 6 },{ name: "ham", type: "MEAT", price: 4 }
];
items.sort((a, b) => {return order.indexOf(a.type) > order.indexOf(b.type);
});
console.table(items, ["type", "name"]);
// ┌─────────┬──────────────┬─────────────┐
// │ (index) │     type     │    name     │
// ├─────────┼──────────────┼─────────────┤
// │    0    │    'MEAT'    │   'pork'    │
// │    1    │    'MEAT'    │    'ham'    │
// │    2    │ 'VEGETABLES' │  'peppers'  │
// │    3    │   'FRUIT'    │  'apples'   │
// │    4    │   'SNACKS'   │ 'chocolate' │
// └─────────┴──────────────┴─────────────┘

3、Filter,every和一些数组

继续以食品购物主题为例,我们可以使用数组上的 filter 方法来过滤任何属性。在我们的例子中,价格使用了过滤器,您只需返回一个布尔值是否应该包含它。filter 方法循环遍历数组中的所有项目。

const order = ["MEAT", "VEGETABLES", "FRUIT", "SNACKS"];
let items = [{ name: "peppers", type: "VEGETABLES", price: 2.39 },{ name: "apples", type: "FRUIT", price: 3.99 },{ name: "chocolate", type: "SNACKS", price: 3.45 },{ name: "pork", type: "MEAT", price: 6 },{ name: "ham", type: "MEAT", price: 7 }
];
items = items.filter(item => {return item.price > 4;
});
console.table(items);
// ┌─────────┬────────┬────────┬───────┐
// │ (index) │  name  │  type  │ price │
// ├─────────┼────────┼────────┼───────┤
// │    0    │ 'pork' │ 'MEAT' │   6   │
// │    1    │ 'ham'  │ 'MEAT' │   7   │
// └─────────┴────────┴────────┴───────┘

在上面的例子中,我们按价格过滤。例如; 对于 ham,表达式的计算结果为真正的布尔值,该项目将包含在修改后的数组中。

item.price > 4 // true

另一方面,对于apples,表达式的计算结果为 false,因此它被排除在修改后的数组中。

4、可选链

const object = {family: {father: {age: 54},sister: {age: 16}}
}
const ageOfFather = object.family.father.age;
console.log(`Age of Father ${ageOfFather}`);
//Age of Father 54
const ageOfBrother = object?.family?.brother?.age;
console.log(`Age of Brother ${ageOfBrother}`);
//Age of Brother undefined

可选链允许您验证和使用嵌套对象属性,而无需确定每个父对象是否存在。在上面的例子中,我们可以获取兄弟的年龄,如果属性存在就赋值。在可选链之前,我们必须先确定父节点是否存在;

const ageOfBrother = object.family && object.family.brother && object.family.brother.age;

对于深度嵌套的属性,这种链接显然会变得很长。

显然,没有对象链接和没有检查子对象的父对象会导致 TypeError;

const ageOfMother = object.family.mother.age;^
TypeError: Cannot read property 'age' of undefined

5、使用下划线简化数字

在 ES2021 中引入,现在可以使用下划线分隔数字,以便于快速阅读。

// ES2020
const oneMillion = 1000000;// ES2021
const oneMillion = 1_000_000;

6、String.prototype.replaceAll

到目前为止,人们需要使用带有全局标志的正则表达式来替换给定字符串中的字符/单词。

const result = 'Hello World'.replace(/\s/g, '-');
// result => 'Hello-World'

现在我们可以简单地使用 replaceAll 字符串方法。

const result = 'Hello World'.replaceAll(' ', '-');
// result => 'Hello-World'

7、逻辑赋值运算符

空赋值运算符

在 ES2021 之前,我们可以使用三元运算符或 OR 来分配确定的可选类型变量(即可能有也可能没有值的变量);

使用三元运算符

// Using Ternary Operator
let template;
console.log(template);
// undefined
template = template != null ? template : 'default';
console.log(template);
// default

使用 If 语句

// Using If statement
let template;
console.log(template);
// undefined
if (template == null) {template = 'default';
}
console.log(template);
// default

但在使用ES2021,它的任务要简单得多;

let template;
console.log(template);
// undefined
template ??= 'default';
console.log(template);
// default

逻辑 OR 赋值运算符

逻辑 OR 赋值运算符的工作方式与 Nullish 赋值运算符类似,不同之处在于它不是 null 或 undefined,而是在变量的计算结果为 false 时,将其赋值给给定的变量。

const user = {id: 18, first_name: "Aidan"};
console.log(user);
// {id: 18, first_name: "Aidan"}
if(!user.profile_picture) {user.profile_picture = "https://picsum.photos/id/237/200/300" ;
}
console.log(user);
// {id: 18, first_name: "Aidan", profile_picture: "https://picsum.photos/id/237/200/300"}

逻辑 AND 赋值运算符

如果变量的计算结果为真值,则逻辑 AND 赋值运算符会分配一个值。

let user = {id: 18, first_name: "Aidan" };
user &&= {...user, loggedIn: true };
console.log(user);
// {id: 18, first_name: "Aidan", loggedIn: true}

总结

以上就是我今天与您分享的内容,希望对您有所帮助,感谢您的阅读,祝编程愉快!

学习更多技能

请点击下方公众号

不可错过的 7 个JS 小技巧,一定要进来瞧瞧哦相关推荐

  1. 你不知道的十个 JS 小技巧

    总结了一些开发常用的 JS 小技巧,让你的代码更优雅! 1. 使用 const 定义 在开发中不要过度声明变量,尽量使用表达式和链式调用形式.然后一般能用 const 就不要用 let .这种模式写多 ...

  2. 2022前端应该掌握的10个 JS 小技巧

    你知道 0 ?? 1等于多少吗? 大家好,我是 LBJ,今天我们聊聊2022一些值得掌握的新特性! 现在前端发展很快,各种技术和框架层出不穷.百花齐放,很多人都喊学不动啦!事实上JavaScript ...

  3. node.js小技巧——使用 supervisor

    1.首先使用 npm 安装 supervisor: npm install -g supervisor 2.使用 supervisor 命令启动 app.js: supervisor app.js s ...

  4. 前端开发,JavaScript实际开发过程中常用JS小技巧

    1.JS 阻止'a'标签默认事件 //阻止a标签默认事件 var evt = evtwindow.event;/获取event对象 if (evt.preventDefault) {evt.preve ...

  5. JS小技巧——随机数的生成

    应用场景: 日常生活中,抽奖环节或者选人环节对于一个范围内随机数选择的频率是很高的. 例如1~100之间的某个整数. 问题描述: JS中 Math 对象的 random() 方法是结果在 [0,1) ...

  6. 20个JS 小技巧超级实用

    1. 将彻底屏蔽鼠标右键οncοntextmenu="window.event.returnValue=false"<tableborder oncontextmenu=re ...

  7. JS小技巧 ----- 在onmousedown事件下避免文本选取

    场景 在浏览器中,当我们长按鼠标左键后会开始选取文段,松开鼠标后再对着文本长按左键,就可以移动文本的副本到浏览器搜索栏中了.现在我们要通过JS实现长按元素来拖拽一个元素,但是当无意间选中文本只后,再来 ...

  8. js小技巧,收藏.作者:空军上将

    1.document.write(""); 输出语句 2.JS中的注释为// 3.传统的HTML文档顺序是:document->html->(head,body) 4. ...

  9. 200多个JS小技巧

    1.文本框焦点问题 onBlur:当失去输入焦点后产生该事件 onFocus:当输入获得焦点后,产生该文件 Onchange:当文字值改变时,产生该事件 Onselect:当文字加亮后,产生该文件   ...

最新文章

  1. 前端如何查看音频的长度_重学前端基础:如何查看文档对象的所有属性?如何文档查找节点?...
  2. java urlstreamhandler_获取对Java的默认http(s)URLStreamHandler的引用
  3. POJ 3553 Light Switching Game 博弈论 nim积 sg函数
  4. 最大似然估计_R初等统计分析(一)——概率分布、最大似然估计
  5. Spring中拦截/和拦截/*的区别
  6. oracle 恢复学习 案例1 一个数据文件丢失 完全恢复数据库
  7. 【贪心 哈夫曼树】bzoj2923: [Poi1998]The lightest language
  8. 电脑删除的文件去哪了?删除的数据恢复,居然有3个方法…
  9. Arduino ESP32 看门狗定时器
  10. Cocos野兽派 | 如何创造真正的优秀游戏
  11. Web前端期末大作业--中国港珠澳大桥网页设计(HTML+CSS+JavaScript)实现
  12. Bootstrap4速成笔记五 Listgroup,Modal,Nav,NavBar
  13. Mifare S50与Mifare S70
  14. 基于TP5、EasyWeChat、fastadmin微信公众号网页授权登录
  15. 很牛的运维必须精通Linux
  16. 如何理解第三方支付清算和结算?
  17. 【CCF会议期刊推荐】中国计算机协会(CCF)推荐计算领域高质量科技期刊分级目录(T1类)
  18. E-NCAP增加黑暗场景下AEB测试,红外夜视或成主流配置
  19. 《设计模式》12.组合模式(结构型)
  20. 北大计算机陈鹏,陈鹏-北京语言大学人事处

热门文章

  1. 【golang】timer 和 ticker
  2. 云计算基础课堂001 Linux系统与CentOS7的安装部署(小白向—怎么在VMware虚拟机安装基于Linux操作系统的CentOS7)
  3. JavaScript的调试工具
  4. 爬虫+可视化——链家杭州二手房房源信息
  5. 虚拟机ubuntu设置和windows的共享文件夹
  6. Kettle: 合并记录
  7. 一张显卡卖5-6万?Tesla计算卡你凭什么这么贵!
  8. 高性能v100 gpu服务器,TESLA V100 GPU 加速性能指南
  9. PS海报制作的常用方法
  10. SLCP验厂辅导,SLCP是向最终用户分享已验证的评估数据的关键