【面试题】15个提高Javascript开发技巧

简介: 【面试题】15个提高Javascript开发技巧

现在,我们一起来看看这些技巧。

1.判断空和未定义

我们很快就会在 JavaScript 中学到的一件事是,并非一切都像它看起来的那样,并且在像这样的动态语言中,变量可能会以多种方式导致你出现问题。可以进行的一个非常常见的测试是检查变量是否为空或未定义,甚至“空”,如下例所示:

let username;
if (name !== null || name !== undefined || name !== '') {
   userName = name;
} else {
   userName = "";

进行相同评估的更简单方法是:

let userName = name || "";

如果你不相信,请测试一下!

2.数组定义

所以你必须创建一个 Array 对象,然后用它的元素填充它,对吧?你的代码可能看起来像这样:

let a = new Array(); 
a[0] = "s1"; 
a[1] = "s2"; 
a[2] = "s3";
复制代码

在一行中做同样的事情怎么样?

let a = ["s1", "s2", "s3"]
复制代码

挺好看的吧!

注意:我知道这个技巧更简单,但对我来说很简单,它可能会帮助一些从其他编程语言开始的人。

3.三元运算符

著名的“单行 if/else”,三元运算符对于 Java 和 C# 等语言对于许多程序员来说已经是老熟人了。它也存在于 JS 中,并且可以像这样轻松地转换代码块:

let big;
if (x > 10) {
    big = true;
}
else {
    big = false;
}

在这:

let big = x > 10 ? true : false;

或者更简单:

let big = x > 10; 但它也适用于函数调用吗?如果我有两个不同的函数,并且我想在 if 为真时调用一个,在 if 为假的情况下调用一个,通常你会执行以下操作:

function x() { console.log('x') };
function y() { console.log('y') };
let z = 3;
if (z == 3) {
    x();
} else {
    y();
}

但是,你也可以使用三元进行相同的函数调用:

function x() { console.log('x') };
function y() { console.log('y') };
let z = 3;
(z==3 ? x : y)(); // Shortcut

另外,值得一提的是测试变量是否为真的 ifs,一些程序员仍然这样做:

if (likeJs === true)

当他们可以这样做时:

if (likeJs)

4.声明变量

是的,即使是变量的声明也有其怪癖。虽然这不是一个秘密,但你仍然会看到很多程序员做出这样的声明:

let x;
let y;
let z = 3;

他们什么时候可以这样做:

let x, y, z = 3;

5.使用正则表达式

当涉及到文本分析和验证以及某些类型的网络爬虫的数据提取时,正则表达式是创建优雅而强大的代码的好工具。

你可以在以下链接中了解有关如何使用正则表达式的更多信息:

developer.mozilla.org/enUS/docs/W…

regexr.com/

regex101.com/

6.charAt() 快捷键

你只想从一个字符串中选择一个字符,在一个特定的位置,对吧?我敢打赌,你首先想到的是使用 charAt 函数,如下所示:

"string".charAt(0);

但是得到这个,通过记住 String 是一个字符数组的类比,你会得到相同的结果:

"string"[0]; // Returns 's'

7.以 10 为底的幂

这只是对 Base-10 指数数或充满零的著名数字的一种更精简的表示法。对于数学比较接近的人来说,看到其中一个不会太惊讶,但是一个数字 10000 在 JS 中可以很容易地被 1e4 替换,即 1 后跟 4 个零,如下所示:

for (let i = 0; i < 1e4; i++) {

8.模板文字

这种语义特性是 ECMAScript 版本 6 或更高版本所独有的,并且极大地简化了读取变量集中的字符串连接。例如,下面的串联:

const question = “My number is “ + number + “, ok?”

这个很简单,你可能做了更糟糕的连接。从 ES6 开始,我们可以使用模板文字进行这种连接:

const question = `My number is ${number}, ok?`

9.箭头函数

箭头函数是声明函数的缩短方式。是的,自第一个 JavaScript 版本以来,有更多方法可以做同样的事情。例如,下面是一个求和函数:

function sum(n1,n2){
   return n1 + n2;
}

我们也可以像这样声明这个函数:

const sum = function(n1,n2){
   return n1+n2;
}

但是使用箭头函数:

const sum = (n1,n2) => n1 + n2;

10.参数解构

本技巧适用于那些充满参数的函数,并且你决定用一个对象替换所有这些函数。或者对于那些真正需要配置对象作为参数的函数。

到目前为止都没有问题,毕竟谁从来没有经历过这个?问题是必须继续访问由参数传递的对象,然后是我们要读取的每个属性,对吧?像这样:

function init(config){
   const s = config.s;
   const t = config.t;
   return s + t;// or config.s + config.t
}
init({s: "1", t: "2"});

参数解构特性正是为了简化这一点,同时通过用下面的语句替换前面的语句来帮助代码可读性:

function init({s, t}){
   return s + t;
}
init({s: 1, t: 2});

最重要的是,我们仍然可以在参数对象的属性中添加默认值:

function init({s = 10, t = 20}){
   return s + t;
}
init({s: 1});

这样,s 的值为 1,但 t 的值将默认为该属性,即 20。

11.键值名称

一个非常令人上瘾的功能是为对象分配属性的缩写方式。想象一下,你有一个 person 对象,该对象具有将通过 name 变量分配的 name 属性。它看起来像这样:

const name = "Joseph"
const person = { name: name }
// { name: "Joseph" }

虽然你可以这样做:

const name = "Joseph"
const person = { name }
// { name: "Joseph" }

也就是说,如果你的变量与属性同名,则不需要调用它,只需传递变量即可。多个属性也是如此:

const name = "Joseph"
const canCode = true
const person = { name, canCode }
// { name: "Joseph", canCode: true }

12.Map

考虑以下对象数组:

const animals = [
    {
        "name": "cat",
        "size": "small",
        "weight": 5
    },
    {
        "name": "dog",
        "size": "small",
        "weight": 10
    },
    {
        "name": "lion",
        "size": "medium",
        "weight": 150
    },
    {
        "name": "elefante",
        "size": "large",
        "weight": 5000
    }
]

现在想象一下,我们只想将动物的名字添加到另一个数组中。通常我们会这样做:

let animalNames = [];
for (let i = 0; i < animals.length; i++) {
    animalNames.push(animals[i].name);
}

但是使用 Map,我们可以这样做:

let animalNames = animais.map((animal) => {
    return animal.nome;
})

请注意,map 需要一个最多三个参数的函数:

  • 第一个是当前对象(如在 foreach 中)
  • 第二个是当前迭代的索引
  • 第三个是整个数组

显然,这个函数将为动物数组中的每个对象调用一次。

13.Filter

如果我们想遍历与上一个技巧中相同的动物对象数组,但这次只返回那些大小为“小”的对象怎么办?

我们将如何使用常规 JS 来做到这一点?

let smallAnimals = [];
for (let i = 0; i < animals.length; i ++) {
    if (animals[i].size === "small") {
       smallAnimals.push(animals[i])
    }
}

然而,使用过filter操作符,我们可以用一种更简洁、更清晰的方式来做到这一点:

let smallAnimals = animais.filter((animal) => {
    return animal.size === "small"
})

Filter 期望一个函数的参数是当前迭代的对象(如在 foreach 中),它应该返回一个布尔值,指示该对象是否将成为返回数组的一部分(true 表示它通过了测试 并将成为其中的一部分)。

14.Reduce

Javascript 的另一个重要特性是 reduce。它允许我们以非常简单和强大的方式在集合之上进行分组和计算。例如,如果我们想将动物对象数组中所有动物的重量相加,我们会怎么做?

let totalWeight = 0;
for (let i = 0; i < animals.length; i++) {
    totalWeight += animals[i].weight;
}

但是使用 reduce 我们可以这样做:

let totalWeight = animals.reduce((total, animal) => {
    return total += animal.weight;
}, 0)

Reduce 需要一个带有以下参数的函数:

  • 第一个是累加器变量的当前值(在所有迭代结束时,它将包含最终值)
  • 第二个参数是当前迭代的对象
  • 第三个参数是当前迭代的索引
  • 第四个参数是将要迭代的所有对象的数组

此函数将对数组中的每个对象执行一次,并在其执行结束时返回聚合值。

有了这些技巧,让你的开发事半功倍,不加班,不熬夜,不脱发。再也不是梦!

 

给大家推荐一个实用面试题库

1、前端面试题库 (面试必备)            推荐:★★★★★

地址:前端面试题库

相关文章
|
25天前
|
Web App开发 JavaScript 前端开发
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念,包括事件驱动、单线程模型和模块系统;探讨其安装配置、核心模块使用、实战应用如搭建 Web 服务器、文件操作及实时通信;分析项目结构与开发流程,讨论其优势与挑战,并通过案例展示 Node.js 在实际项目中的应用,旨在帮助开发者更好地掌握这一强大工具。
44 1
|
16天前
|
Web App开发 JavaScript 前端开发
Node.js开发
Node.js开发
32 13
|
23天前
|
存储 JavaScript 前端开发
深入浅出Node.js后端开发
在数字化时代的浪潮中,后端开发作为连接用户与数据的桥梁,扮演着至关重要的角色。本文将以Node.js为例,深入探讨其背后的哲学思想、核心特性以及在实际项目中的应用,旨在为读者揭示Node.js如何优雅地处理高并发请求,并通过实践案例加深理解。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的视角和思考。
|
20天前
|
Web App开发 开发框架 JavaScript
深入浅出Node.js后端开发
本文将带你领略Node.js的魅力,从基础概念到实践应用,一步步深入理解并掌握Node.js在后端开发中的运用。我们将通过实例学习如何搭建一个基本的Web服务,探讨Node.js的事件驱动和非阻塞I/O模型,以及如何利用其强大的生态系统进行高效的后端开发。无论你是前端开发者还是后端新手,这篇文章都会为你打开一扇通往全栈开发的大门。
|
23天前
|
Web App开发 开发框架 JavaScript
深入浅出Node.js后端开发
在这篇文章中,我们将一起探索Node.js的奇妙世界。无论你是刚接触后端开发的新手,还是希望深化理解的老手,这篇文章都适合你。我们将从基础概念开始,逐步深入到实际应用,最后通过一个代码示例来巩固所学知识。让我们一起开启这段旅程吧!
|
19天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
本文将带领读者从零基础开始,一步步深入到Node.js后端开发的精髓。我们将通过通俗易懂的语言和实际代码示例,探索Node.js的强大功能及其在现代Web开发中的应用。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的见解和技巧,让你的后端开发技能更上一层楼。
|
22天前
|
JavaScript 前端开发 API
深入理解Node.js事件循环及其在后端开发中的应用
本文旨在揭示Node.js的核心特性之一——事件循环,并探讨其对后端开发实践的深远影响。通过剖析事件循环的工作原理和关键组件,我们不仅能够更好地理解Node.js的非阻塞I/O模型,还能学会如何优化我们的后端应用以提高性能和响应能力。文章将结合实例分析事件循环在处理大量并发请求时的优势,以及如何避免常见的编程陷阱,从而为读者提供从理论到实践的全面指导。
|
23天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
本文将带你走进Node.js的世界,从基础到进阶,逐步解析Node.js在后端开发中的应用。我们将通过实例来理解Node.js的异步特性、事件驱动模型以及如何利用它处理高并发请求。此外,文章还会介绍如何搭建一个基本的Node.js服务器,并探讨如何利用现代前端框架与Node.js进行交互,实现全栈式开发。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的视角和深入的理解。
17 4
|
24天前
|
前端开发 JavaScript 关系型数据库
基于 Vue2.0 + Nest.js 全栈开发的后台应用
Vue2 Admin 是一个基于 Vue2 和 Ant Design Pro 开发的前端项目,配合 Nest.js 构建的后端,提供了一个完整的全栈后台应用解决方案。该项目支持动态国际化、用户权限管理、操作日志记录等功能,适合全栈开发者学习参考。线上预览地址:https://vue2.baiwumm.com/,用户名:Admin,密码:abc123456。
|
25天前
|
开发框架 JavaScript 前端开发
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势。通过明确的类型定义,TypeScript 能够在编码阶段发现潜在错误,提高代码质量;支持组件的清晰定义与复用,增强代码的可维护性;与 React、Vue 等框架结合,提供更佳的开发体验;适用于大型项目,优化代码结构和性能。随着 Web 技术的发展,TypeScript 的应用前景广阔,将继续引领 Web 开发的新趋势。
35 2