七个 JavaScript 实用小技巧

栏目: JavaScript · 发布时间: 5年前

内容简介:和许多其他语言一样,JavaScript 也需要靠很多小技巧去完成各种不同的事情。有的可能早已经广为人知,有的却可能会让你感到有些迷惑。接下来先介绍七个马上就能用起来的 JavaScript 小技巧。完成数组去重可能比你想象中更容易:这里使用到了

和许多其他语言一样,JavaScript 也需要靠很多小技巧去完成各种不同的事情。有的可能早已经广为人知,有的却可能会让你感到有些迷惑。接下来先介绍七个马上就能用起来的 JavaScript 小技巧。

数组去重

完成数组去重可能比你想象中更容易:

var j = [...new Set([1, 2, 3, 3])]
>> [1, 2, 3]

这里使用到了 Set 和扩展运算符。

数组和布尔

关于如何过滤掉数组中的假值,可能不知道这样一个简单的技巧:

myArray
    .map(item => {
        // ...
    })
    // Get rid of bad values
    .filter(Boolean);

只需要将 Boolean 传给 filter 函数即可过滤掉数组中的所有假值。

创建一个空对象

你可能会直接使用对象字面量 {} 去创建一个空对象,但是这个空对象仍然包含 __proto__hasOwnProperty 以及其他的对象方法。这里提供一种方式,可以创建真正的空对象:

let dict = Object.create(null);

// dict.__proto__ === "undefined"
// No object properties exist until you add them

这个对象不包含任何属性或者方法。

对象合并

在 JavaScript 中合并对象的需求应该有很多,比如当创建一个有很多选项的类或组件的时候。

const person = { name: 'David Walsh', gender: 'Male' };
const tools = { computer: 'Mac', editor: 'Atom' };
const attributes = { handsomeness: 'Extreme', hair: 'Brown', eyes: 'Blue' };

const summary = {...person, ...tools, ...attributes};
/*
Object {
  "computer": "Mac",
  "editor": "Atom",
  "eyes": "Blue",
  "gender": "Male",
  "hair": "Brown",
  "handsomeness": "Extreme",
  "name": "David Walsh",
}
*/

扩展运算符( ... ) 让这项工作变得异常简单。

函数必需参数

可以给函数设置默认参数是一项很厉害的特性,可以通过传一个函数去检查必需参数是否传参:

const isRequired = () => { throw new Error('param is required'); };

const hello = (name = isRequired()) => { console.log(`hello ${name}`) };

// This will throw an error because no name is provided
hello();

// This will also throw an error
hello(undefined);

// These are good!
hello(null);
hello('David');

解构赋值别名

解构是一项非常强大的特性,

const obj = { x: 1 };

// Grabs obj.x as { x }
const { x } = obj;

// Grabs obj.x as { otherName }
const { x: otherName } = obj;

需要避免跟已有变量产生命名冲突时非常有用。

获取 query 参数

曾经我们必需通过正则表达式的方式去获取 query 参数的值,但现在已经不需要了,可以使用 URLSearchParams Web API:

// Assuming "?post=1234&action=edit"

var urlParams = new URLSearchParams(window.location.search);

console.log(urlParams.has('post')); // true
console.log(urlParams.get('action')); // "edit"
console.log(urlParams.getAll('action')); // ["edit"]
console.log(urlParams.toString()); // "?post=1234&action=edit"
console.log(urlParams.append('active', '1')); // "?post=1234&action=edit&active=1"

译者说

似乎许多人仍然颇为沉迷于这种技巧性质的东西,如最前所言,大部分或许早已成为一些常识性的东西,但对于某个特定的个体而言,可能还是初次见面,多多指教的情况。老实讲,文章所说的小技巧大部分都是 ES6 新增的语法特性,ES6,或者说 ES2015 已经发布好些年头,这些特性大家可能已经非常熟识。现在 ES 的发布方式,每年小版本更新,已经渐渐淡化版本的概念,更关心的或许是宿主环境实现了什么。

逐条细说,第一条,是流传相当广的一行代码。2, Boolean 本身也是一个构造函数,不使用 new 的时候相当于进行一个 ToBoolean 转换操作,但这条平常也没有用到。3,使用对象字面量 {} 相当于是 Object.create(Object.prototype) ,如果不希望有太多对象方法,倒是可以试试 Object.create(null) 。4,对象合并,不多说,大部分场景可以取代 Object.assign 。5,对函数参数默认值挺有意思的一种用法。6,解构赋值别名,没什么好说的。7, URLSearchParams 这是一个新的浏览器的 API ,不算 JavaScript 语言的,第一次见,支持度还比较弱。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Once Upon an Algorithm

Once Upon an Algorithm

Martin Erwig / MIT Press / 2017-9-8 / GBP 22.95

How Hansel and Gretel, Sherlock Holmes, the movie Groundhog Day, Harry Potter, and other familiar stories illustrate the concepts of computing. Picture a computer scientist, staring at a screen and......一起来看看 《Once Upon an Algorithm》 这本书的介绍吧!

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具