当前位置: 首页 > news >正文

if else 简写_15+ JS简写骚操作,让你的代码“秀”起来??

译者:王二狗
博客:掘金、思否、知乎、简书、CSDN
点赞再看,养成习惯,你们的支持是我持续分享的最大动力
原文链接:https://www.sitepoint.com/shorthand-javascript-techniques/

三元操作符

使用三元操作符可以让你的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";

短路操作符

当进行变量赋值的时候,你可能需要确保被用来赋值的变量不是nullundefined或者为

简化前:

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

简化后:

const variable2 = variable1  || 'new';

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

let variable1;
let variable2 = variable1  || 'bar';
console.log(variable2 === 'bar'); // prints truevariable1 = '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' ]
**/
告诫自己,即使再累也不要忘记学习,成功没有捷径可走,只有一步接着一步走下去。 共勉!

http://www.taodudu.cc/news/show-647657.html

相关文章:

  • 【physx/wasm】在physx中添加自定义接口并重新编译wasm
  • excel---常用操作
  • Lora训练Windows[笔记]
  • linux基础指令讲解(ls、pwd、cd、touch、mkdir)
  • InnoDB 事务处理机制
  • 启明云端ESP32 C3 模组WT32C3通过 MQTT 连接 AWS
  • iextensionunit类_Java ICompilationUnit.reconcile方法代码示例
  • 报错 插入更新_自增主键,三类插入测验答案,在这里。
  • 事务连接中断_HTTP长连接和短连接
  • 亚马逊评价抓取插件_亚马逊运营必备插件
  • controller需要捕获异常吗_Spring之Controller异常处理
  • mysql8中文排序_mysql中utf8编码的中文字段按拼音排序
  • html 分级切换菜单_FL studio系列教程(十六):FL Studio查看菜单讲解
  • mysql还原数据库后日期显示3000_mysql 直接从date 文件夹备份表,还原数据库之后提示 table doesn`t exist的原因和解决方法...
  • java 函数名调用_粉丝提问|c语言:如何定义一个和库函数名一样的函数,并在函数中调用该库函数...
  • docker mysql sock_docker mysql安装
  • mysql最大述_mysql最大字段数量及 varchar类型总结
  • php协程实现mysql异步_swoole与php协程实现异步非阻塞IO开发
  • mysql中xml类型_使用 SQLXML 数据类型
  • mysql语法6_全面接触SQL语法(6)_mysql
  • sqlerver mysql_转 MYSQL学习(一)
  • tcpdump 识别成dns_dns tcpdump
  • java linkedhashmap_java学习-hashMap和linkedHashMap
  • 简单java题_java
  • java actionsupport_struts2中的Action接口和Actionsupport接口各有什么作用
  • java jar log4j_使用Log4j
  • java课程设计进程管理_GitHub - Shadow-Java/OS: 操作系统课程设计,关键词:进程同步与互斥、进程死锁、LRU页面替换算法、时间片轮转算法、时钟等...
  • mysql中建立索引的原则_在SQL数据库中设定索引的原则是什么?(注意是设定不是创建)...
  • java宝典_JAVA宝典之_JAVA基础
  • java blockingqueue_Java多线程进阶(三一)—— J.U.C之collections框架:BlockingQueue接口...
  • java 转账 锁_Java多线程 多个人转账发生死锁
  • java 静态变量 存储_Java学习笔记9---类静态成员变量的存储位置及JVM的内存划分...
  • java坐标移动题目case_坐标移动
  • java代码实现购物车小程序_使用Taro实现小程序商城的购物车功能模块的实例代码...
  • php中怎么过滤器_PHP 过滤器
  • java中的静态初始化是什么意思,Java中static静态变量的初始化完全解析