【面试题】前端应该了解的个JavaScript技巧有什么?

news2025/1/10 20:24:05

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

地址:前端面试题库

 

【国庆头像】- 国庆爱国 程序员头像!总有一款适合你!

简介

如果你用这些技巧优化你的js码,它可以帮助你编写更干净、整洁、易维护的代码,为你节省编程时间。

1、灵活使用 && 或 || 代替if

在一些简单的情况下,你可以使用逻辑运算符&& 或 || 代替if。
代码列子1:

    // 繁琐的
    if (isGetData) {
      this.getData();
    }

    // 好的
    isGetData && this.getData();

代码列子2:

     // 繁琐的
    if (res.data) {
      return res.data;
    } else {
      return [];
    }

    // 好的
    return res.data || [];

2、~~运算符取整

~是按位取反运算,~~是取反两次,在这里~~的作用是去掉小数部分
因为位运算的操作值要求是整数,其结果也是整数,所以经过位运算的都会自动变成整数
道理与用运算符把任意类型转化为 Boolean 类似
代码列子1:

    let a = 1;
    // 利用!!将a转换成 Boolean 值
    a = !!a; // true
    a = 0;
    a = !!a; // false
    a = {}
    a = !!a; // true

代码列子2:使用 ~~ 代替 Math.floor()

    // 取整
    Math.floor(Math.random() * 50);

    // 取整
    ~~(Math.random() * 50);
    ~~'1.11111'; // 1
    ~~'whitedress1'; //  0
    ~~NaN; //  0

3、灵活使用 array.length 调整数组长度或清空数组

有时你需要调整数组长度或清空数组。最有效的方法是使用Array.length

代码列子:

    const array = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'];

    console.log(array.length); //  10

    // 调整数组大小
    array.length = 4;

    console.log(array.length); //  4
    console.log(array); // ['a', 'b', 'c', 'd']

    // 清空数组
    array.length = 0;
    console.log(array.length); //  0
    console.log(array); // []

4、如何高效处理数组合并

合并数组时,可能会对浏览器造成严重的压力,尤其是在处理大量数据时。想要保持简单和高效,请使用Array.concat() 和 Array.push.apply(arr1, arr2) 函数。

处理较小的数组,建议使用Array.concat()
代码列子:

let list1 = ['a', 'b'];
let list2 = ['c', 'd'];

console.log(list1.concat(list2)); // ['a', 'b', 'c', 'd']

在较大数组时,它会在创建新数组时消耗大量内存。要解决性能下降问题,建议使用Array.push.apply(arr1, arr2)
代码列子:

let list1 = ['a', 'b', 'c', 'd', 'e'];
let list2 = ['f', 'g', 'h', 'i', 'j'];

console.log(list1.push.apply(list1, list2)); // 10
console.log(list1); // returns ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

5、数组过滤使用 filter()

filter()在筛选数组非常有用。在这种情况下,你可以根据数组的特征来排除数据。

代码列子:

let ages = [32, 33, 16, 40];
ages = ages.filter(age => age >= 18);
console.log(ages); // 32,33,40

6、快速去重 ...new Set(arr)

假设你有一个重复值的数组,你需要去重。可以使用扩展语法和对象类型的组合来实现。此方法适用于StringNumber
代码列子:

const cars = ['Opel', 'Bugatti', 'Opel', 'Ferrari', 'Ferrari', 'Opel'];
const unrepeated_cars = [...new Set(cars)];

console.log(unrepeated_cars); // ['Opel', 'Bugatti', 'Ferrari']

7、正则结合replace()实现替换功能

大家应该熟悉该功能。但是,它默认执行替换一次。假设你需要批量替换,可以配合正则使用。

const grammar = 'synonym synonym';

console.log(grammar.replace('synonym', 'anto')); // anto synonym
console.log(grammar.replace(/syno/, 'anto')); //  'antonym synonym'
console.log(grammar.replace(/syno/g, 'anto')); //'antonym antonym'

8、使用模版字符进行字符串的拼接

模版字符使用(``)字符结合(${}),其中可以包含变量、表达式等。
代码列子:

const name = '三哥';
const age = '26';
// const str = '他叫' + name + age;
const str = `他叫${name}${age}`;

9、如何检查对象是否有值

检查对象是否为空的快速技巧是使用Object.keys()
代码列子:

Object.keys(objectName).length // 如果返回0,则objectName为空,否则显示值的数目

10、灵活使用 ? 与 ??运算符

可选链操作符( ?. )允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。操作符的功能类似于( . )链式操作符,不同之处在于,在引用为空null或者 undefined的情况下不会引起错误,该表达式返回值是 undefined。与函数调用一起使用时,如果给定的函数不存在,则返回 undefined.

在我们日常开发中, 常遇到这样的报错 Cannot read properties of undefined (reading 'XXX')

代码列子:

 const obj = {};
 console.log(obj.user.name); // 报错  Cannot read properties of undefined (reading 'name')
 console.log(obj.user?.name); // undefined

空值合并运算符( ?? )是一个逻辑操作符,如果左侧的表达式为 null或者 undefined 时,返回其右侧表达式,否则返回左侧表达式。
代码列子:

null ?? 1; //  1
undefined ?? 2; // 2
true ?? 1; // true

 

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

地址:前端面试题库

 

【国庆头像】- 国庆爱国 程序员头像!总有一款适合你!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1020361.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AUTOSAR通信篇 - CAN网络通信(五:ComM)

文章目录 模块交互EcuM交互BswM交互NvM交互CanSM交互NM交互 ComM功能Paritial Network Cluster 管理Partial Network Cluster 管理功能ComM PNC状态机在主状态COMM_PNC_NO_COMMUNICATION中PNC的行为PNC网关相关的要求 从断电进入PNC主状态COMM_PNC_NO_COMMUNICATION时在主状态C…

微软发现影响 Linux 和 macOS系统的 ncurses 库漏洞

微软在 ncurses(new curses 的缩写)编程库中发现了一组内存损坏漏洞,威胁者可利用这些漏洞在易受攻击的 Linux 和 macOS 系统上运行恶意代码。 微软威胁情报研究人员 Jonathan Bar Or、Emanuele Cozzi 和 Michael Pearse 在今天发布的一份技…

GcExcel:Java 应用创建、修改和保存 Excel 电子表格 -Crack

在 Java 应用程序中创建、修改和保存 Excel 电子表格: GrapeCity Documents for Excel,Java 版 (GcExcel) 是一个高速 Java Excel 电子表格 API 库,不需要依赖于 Microsoft Excel。用户可以通过 Java 应用程序以编程方式创建、编辑、导入和导…

PP-Tracking之C++部署

文章目录 概要环境fastdeploy源码编译PP-Tracking源码编译使用参考概要 PP-Tracking是基于飞桨深度学习框架的业界首个开源实时跟踪系统。针对实际业务的难点痛点,PP-Tracking内置行人车辆跟踪、跨镜头跟踪、多类别跟踪、小目标跟踪及流量计数等能力与产业应用,同时提供可视…

大数据学习1.5-单机Hadoop

1.修改主机信息 vi /etc/hosts 2.修改信息如下(这里第三位一定是自己的IP 每个人都不一样) 192.168.216.140 hadoop01 192.168.216.141 hadoop02 192.168.216.142 hadoop033.修改Hadoop配置信息-1进入配置信息文件 cd /usr/local/hadoop/hadoop-2.7.1/etc/hadoop/ 4.修改Had…

wx-open-subscribe自定义样式和按钮无效【已解决】

有一个需求&#xff0c;是在微信公众号中加下类似于小程序的的那个订阅消息弹框&#xff0c;需要用户点击允许才可以给用户推送消息。如下图 微信官方文档&#xff1a;wx-open-subscribe 官方示例如下&#xff1a; 这个代码一看也能看明白&#xff0c;<wx-open-subscribe包…

【计算机网络】——数据链路层(应用:介质访问控制)

//仅做个人复习和技术交流&#xff0c;图片取自王道考研&#xff0c;侵删 一、大纲 1、介质访问控制 信道划分介质访问控制 随机访问介质访问控制 2、局域网 3、广域网 4、数据链路层设备 二、介质访问控制 省流&#xff1a;把广播信道通过介质访问控制机制 逻辑上转换为 …

Window 10安装MySQL 5.7

1、访问如下链接进行下载&#xff1a;Mysql官方下载地址 官方地址下载的东西没有那么多病毒~。这东西见仁见智吧哈哈~。有些人不怕这个。 注意安装上面这个下面的是test 2、填写mysql的环境变量 具体操作步骤如下&#xff1a; 在桌面按下快捷键“WinR”输入“control sysdm…

JVM内存模型(JMM)

目录 一、运行时数据区域划分 ​编辑 二、线程私有的 1、程序计数器 2、虚拟机栈&#xff08;VM Stack&#xff09; 3、本地方法栈 三、线程公有的 1、堆 2、元空间 Java程序把内存控制权利交给JVM虚拟机&#xff0c;一旦出现内存泄漏和溢出方法的问题&#xff0…

Webpack使用output配置打包代码信息和自动清理打包目录

一、修改代码打包后的文件名 二、自动清理打包目录 如果我们将打包文件名修改再进行打包&#xff0c;会发现之前不同名的打包文件会进行保留 在output对象中配置clean属性可自动清理打包目录 三、指定打包文件的目录 四、指定多个打包文件文件名

爬虫 — 多线程

目录 一、多任务概念二、实现多任务方式1、多进程 &#xff08;Multiprocessing&#xff09;2、多线程&#xff08;Multithreading&#xff09;3、协程&#xff08;Coroutine&#xff09; 三、多线程执行顺序四、多线程的方法1、join()2、setDaemon()3、threading.enumerate() …

npm发布vue3自定义组件库--方法一

npm发布vue3自定义组件库 创建项目 vue create test-ui自定义组件 创建自定义组件&#xff0c;组件名称根据你的需求来&#xff0c;最好一个组件一个文件夹&#xff0c;下图是我的示例。 src/components 组件和你写页面一样&#xff0c;所谓组件就是方便实用&#xff0c;不…

Unity Bolt 实现UI拖拽功能

最近在学习使用Bolt插件实现五代码对UGUI Image元素实现拖拽。先看效果 录制_2023_09_15_17_50_45_29 下面是实现方式介绍&#xff1a; 1&#xff1a;注册RectTransformUtility 在使用Bolt插件实现UI拖拽的功能&#xff0c;需要使用 RectTransformUtility.ScreenPointToLoca…

网络安全深入学习第五课——热门框架漏洞(RCE— Apache Shiro 1.2.4反序列化漏洞)

文章目录 一、序列化和反序列化二、反序列化漏洞原理三、Apache Shiro 1.2.4反序列化漏洞1、漏洞描述&#xff1a;2、漏洞影响的版本3、Shiro反序列化漏洞原理4、工作原理&#xff1a;5、shiro反序列化的特征&#xff1a; 四、Apache Shiro 1.2.4反序列化漏洞手工复现1、使用DN…

做好制造项目管理的5个技巧

制造过程通常由不同的要素组成&#xff0c;如采购材料、与供应商合作、优化生产线效率等。制造商还需要处理库存、物流和分销。 为了确保制造项目在预算范围内按时完成&#xff0c;并且不遗漏任何环节&#xff0c;企业必须建立项目管理流程&#xff0c;以帮助改善组织流程和效…

社区版MyApps低代码平台,免费即刻拥有!

编者按&#xff1a;本文主要介绍了MyApps推出的免费社区版的优势&#xff0c;为企业数字化转型提供了解决方案。立即登录MyApps低代码平台&#xff0c;就能获取永久免费的低代码平台。 1.MyApps社区版的优势 1.1不受限制&#xff0c;畅享自由 无用户限制、无安装限制、全面应用…

使用 Charles 去修改响应信息(真实工作使用场景1)

目录 背景 理论 Breakpoint功能 Map功能 实践 原理 背景 测试过程中&#xff0c;遇到接口透传数据&#xff0c;修改请求中的值可以使用Postman来进行&#xff0c;当业务场景遇到修改响应里的值的时候&#xff0c;就需要借助Charles来进行。 以下将会阐述具体的步…

七天学会C语言-第三天(循环语句)

1. 用 while 语句循环做数学运算&#xff1a; 使用while语句&#xff0c;您可以创建一个循环&#xff0c;它会重复执行一段代码&#xff0c;直到指定的条件不再满足。 例 1&#xff1a; 求 246100。 #include <stdio.h>int main() {int n 1, sum 0, a 2;while (n &…

第六章 关系数据库理论

第六章 关系数据库理论 6.1 问题的提出 关系模式的表示 关系模式由五部分组成&#xff0c;是一个五元组&#xff1a;R&#xff08;U&#xff0c;D&#xff0c;DOM&#xff0c;F&#xff09;。&#xff08;1 关系名R是符号化的元组语义。U为一组属性。D为属性组U中的属性所来自…

K8s的网络——Underlay和Overlay网络

0. 基础知识 1&#xff09;网络7层基础知识 在网络7层协议基础里&#xff0c; 第一层物理链路&#xff1b;第二层是数据链路层&#xff0c;在第一层的基础上引入MAC地址做数据转发。MAC地址在局域网内具有唯一性&#xff0c;主机A发送数据时&#xff0c;会向局域网内进行广播…