面试 JavaScript 框架八股文十问十答第二期

面试 JavaScript 框架八股文十问十答第二期

作者:程序员小白条,个人博客

相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新!

⭐点赞⭐收藏⭐不迷路!⭐

1)其他值到字符串的转换规则?

  • 数字转换为字符串: 数字直接被转换为对应的字符串形式。
  • 布尔值转换为字符串: true 被转换为字符串 "true"false 被转换为字符串 "false"
  • null 转换为字符串: null 被转换为字符串 "null"
  • undefined 转换为字符串: undefined 被转换为字符串 "undefined"
  • 对象转换为字符串: 大多数对象被转换为字符串 “[object Object]”。

2)其他值到数字值的转换规则?

  • 字符串转换为数字: 如果字符串可以被解析为数字,它将被转换为对应的数字。否则,将被转换为 NaN。
  • 布尔值转换为数字: true 被转换为数字 1,false 被转换为数字 0。
  • null 转换为数字: null 被转换为数字 0。
  • undefined 转换为数字: undefined 被转换为 NaN。
  • 对象转换为数字: 对象首先被转换为相应的原始值,然后再按照上述规则进行转换。

3)其他值到布尔类型的值的转换规则?

  • 数字转换为布尔值: 除了 0、-0、NaN 和 null 外,所有数字转换为 true。
  • 字符串转换为布尔值: 除了空字符串 “” 外,所有字符串转换为 true。
  • null 和 undefined 转换为布尔值: 转换为 false。
  • 对象转换为布尔值: 所有对象(包括数组和函数)转换为 true。

4)|| 和 && 操作符的返回值?

  • || 操作符(逻辑或): 返回第一个为真的操作数,如果所有操作数都是假,则返回最后一个假值。如果操作数是非布尔类型,会按照“短路评估”规则,返回第一个被确定为真的值,或者最后一个值。

    let result = a || b;
    
  • && 操作符(逻辑与): 返回第一个为假的操作数,如果所有操作数都为真,则返回最后一个真值。如果操作数是非布尔类型,会按照“短路评估”规则,返回第一个被确定为假的值,或者最后一个值。

    let result = a && b;
    

5)Object.is() 与比较操作符 “=”、“” 的区别?

  • Object.is() 用于比较两个值是否相同,包括处理特殊情况,如 NaN 等。

    Object.is(value1, value2);
    
  • === 操作符(严格相等): 在比较时不进行类型转换,要求值和类型都相同。

    value1 === value2;
    
  • == 操作符(相等): 在比较时进行类型转换,然后再比较值。

    value1 == value2;
    

6)什么是 JavaScript 中的包装类型?

在 JavaScript 中,有三种基本的包装类型,它们分别是:

  • String 包装类型: 用于处理字符串的对象。当使用字符串字面量时,JavaScript 会自动转换为 String 对象。

    let str = "Hello";
    let strObject = new String("Hello");
    
  • Number 包装类型: 用于处理数字的对象。当使用数字字面量时,JavaScript 会自动转换为 Number 对象。

    let num = 42;
    let numObject = new Number(42);
    
  • Boolean 包装类型: 用于处理布尔值的对象。当使用布尔字面量时,JavaScript 会自动转换为 Boolean 对象。

    let bool = true;
    let boolObject = new Boolean(true);
    

这些包装类型允许对基本类型值进行方法调用,但它们也会引入一些细微的行为差异,因为它们是对象而不是原始值。通常,在处理基本类型时,直接使用字面量而不是包装类型更为常见。

7)JavaScript 中如何进行隐式类型转换?

JavaScript 中的隐式类型转换是指在表达式中,当运算符需要特定类型的操作数时,会自动将操作数转换为适当的类型。这种转换可以发生在各种上下文中,例如算术运算、比较运算、逻辑运算等。常见的隐式类型转换包括:

  • 字符串和数字之间的转换: 在加法操作中,如果其中一个操作数是字符串,另一个操作数会被转换为字符串。

    let num = 10;
    let str = "The number is: " + num; // 隐式将数字转换为字符串
    
  • 布尔值和其他类型之间的转换: 在逻辑运算中,非布尔值会被隐式转换为布尔值。

    if ("hello") {
        // 这段代码会执行,因为字符串 "hello" 被隐式转换为 true
    }
    
  • 比较操作中的类型转换: 在比较运算中,如果操作数的类型不同,JavaScript 会尝试将它们转换为相同的类型再进行比较。

    console.log(5 == "5"); // true,字符串 "5" 被转换为数字 5,然后进行比较
    

8)+ 操作符什么时候用于字符串的拼接?

+ 操作符在 JavaScript 中有两种主要用途:算术加法和字符串拼接。当 + 操作符的其中一个操作数是字符串类型时,它就会执行字符串拼接操作,而不是算术加法。这种行为称为重载。

let str = "Hello" + " " + "World"; // 字符串拼接
let result = "The answer is: " + 42; // 字符串拼接

在以上示例中,+ 操作符被用于连接字符串,而不是执行算术加法。

9)为什么会有BigInt的提案?

JavaScript 中的数字类型通常被限制在 Number 的范围内,即 -2^532^53 之间。这意味着无法准确表示超出这个范围的整数。BigInt 提案旨在解决这一问题,它引入了一种新的数据类型 BigInt,用于表示任意精度的整数。

BigInt 允许你表示超出 Number 范围的整数,从而避免了精度丢失的问题。它对于处理大整数运算、加密算法等场景非常有用。

BigInt 使用后缀 n 来标识一个 BigInt 字面量:

const bigIntNum = 9007199254740991n;

BigInt 提案的目的是为了扩展 JavaScript 的数字能力,使其更适用于更广泛的应用场景。

10)object.assign和扩展运算法是深拷贝还是浅拷贝,两者区别

  • Object.assign: 它用于将一个或多个源对象的可枚举属性复制到目标对象。它是浅拷贝,即只复制对象的第一层属性,如果属性值是对象,则复制的是引用。

    const obj1 = { a: 1, b: { c: 2 } };
    const obj2 = Object.assign({}, obj1);
    obj2.b.c = 3;
    console.log(obj1.b.c); // 3,因为是浅拷贝,obj1 和 obj2 共享 b 对象
    
  • 扩展运算符(Spread Operator): 也是浅拷贝,与 Object.assign 类似,只复制对象的第一层属性,如果属性值是对象,则复制的是引用。

    const obj1 = { a: 1, b: { c: 2 } };
    const obj2 = { ...obj1 };
    obj2.b.c = 3;
    console.log(obj1.b.c); // 3,因为是浅拷贝,obj1 和 obj2 共享 b 对象
    

两者的区别:

  • Object.assign 可以复制到目标对象中,而扩展运算符只能用于创建新对象。
  • Object.assign 是一个函数,接受目标对象和一个或多个源对象作为参数,而扩展运算符是一个语法,只能用于对象字面量中。

需要进行深拷贝时,需要使用其他方法,例如递归复制对象的所有属性,或者使用第三方库来完成深拷贝操作。

开源项目地址:https://gitee.com/falle22222n-leaves/vue_-book-manage-system

已 300 + Star!

⭐点赞⭐收藏⭐不迷路!⭐

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity3d Shader篇(一)— 顶点漫反射着色器解析

文章目录 前言一、顶点漫反射着色器是什么?1. 顶点漫反射着色器的工作原理 二、编写顶点漫反射着色器1. 定义属性2. 创建 SubShader3. 编写着色器程序段4. 完成顶点着色器5. 完成片段着色器 三、效果四、总结 前言 在 Unity 中,Shader 可以用来实现各种…

jmeter设置关联

一、为什么要设置关联? http协议本身是无状态的,客户端只需要简单向服务器请求下载某些文件,无论是客户端还是服务端都不去记录彼此过去的行为,每一次请求之间都是独立的。如果jmeter需要设置跨线程组脚本,就必须设置…

【问题篇】activiti工作流转办并处理备注问题

当处理activiti转办问题时,需要做的就是处理审批人和备注问题。 处理的思路是,先将当前环节标志成转办标签,再通过BUSINESS_KEY_找到流程实例的历史记录,找到最新的一条复制一份出来,表示需要转办到的人的历史记录并设…

APP专项测试方法总结

APP专项测试 1、网络测试 可使用抓包工具辅助网格测试推荐:fiddler,Charles 网络切换: 2G-3G-4G-wifi-网络信号差–无网 网络信号弱: 关注是否出现ANR、crash 2、中断测试 意外中断: 来电;短信&am…

不需英文基础也可以轻松学编程,中文编程开发工具免费版下载,编程工具构件箱之扩展控制面板构件用法

不需英文基础也可以轻松学编程,中文编程开发工具免费版下载,编程工具构件箱之扩展控制面板构件用法 一、前言 编程入门视频教程链接 https://edu.csdn.net/course/detail/39036 编程工具及实例源码文件下载可以点击最下方官网卡片——软件下载——常…

ShardingSphere 5.x 系列【3】分库分表中间件技术选型

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.1.0 本系列ShardingSphere 版本 5.4.0 源码地址:https://gitee.com/pearl-organization/study-sharding-sphere-demo 文章目录 1. 前言2. My Cat3. ShardingSphe…

C++ 类与对象(下)

目录 1. 再谈构造函数 1.1 构造函数体赋值 1.2 初始化列表 1.3 explicit关键字 2. static成员 2.1 概念 2.2 特性 3.友元 3.1友元函数 3.2 友元类 4. 内部类 5.匿名对象 6.拷贝对象时的一些编译器优化 7. 再次理解类和对象 【本节目标】 1. 再谈构造函数 2. Static成员…

【产品升级】SmartPipe升级到版本2.0

在近一个月的攻关和测试下,SmartPipe软件轴线自动识别算法的性能大幅提升,鲁棒性和稳定性进一步增强。近一年来客户累计反馈的多种复杂管路(包括带有支管管路、带有压瘪段管路、推弯管、装配管、带有复杂孔洞管路等)现在均能够正确…

通过消息队列实现进程之间通信代码

#include <myhead.h> struct msgbuf {long int mtype; char mtext[1024]; }; //定义一个消息大小 #define MSGSIZE sizeof(struct msgbuf)-sizeof(long int) int main(int argc, const char *argv[]) {//1、创建key值以便创建消息队列key_t key ftok("/", k)…

Bootstrap5 图片轮播

Bootstrap5 轮播样式表使用的是CDN资源 <title>亚丁号</title><!-- 自定义样式表 --><link href"static/front/css/front.css" rel"stylesheet" /><!-- 新 Bootstrap5 核心 CSS 文件 --><link rel"stylesheet"…

STM32WLE5JC

Sub-GHz 无线电介绍 sub-GHz无线电是一种超低功耗sub-GHz无线电&#xff0c;工作在150-960MHz ISM频段。 在发送和接收中采用LoRa和&#xff08;G&#xff09;FSK调制&#xff0c;仅在发送中采用BPSK/(G)MSK调制&#xff0c;可以在距离、数据速率和功耗之间实现最佳权衡。 这…

freeswitch对接FunASR实时语音听写

1、镜像启动 通过下述命令拉取并启动FunASR软件包的docker镜像&#xff1a; sudo docker pull \registry.cn-hangzhou.aliyuncs.com/funasr_repo/funasr:funasr-runtime-sdk-online-cpu-0.1.7 mkdir -p ./funasr-runtime-resources/models sudo docker run -p 10096:10095 -i…

【Gephi项目实战-带数据集】利用gephi绘制微博肖战超话120位用户关系图,并计算整体网络指标与节点指标

数据集在评论区&#xff0c;B站演示视频在评论区&#xff01; 简介 最近2天需要用到gephi做社会网络分析&#xff0c;于是从0开始接触gephi并摸索出了gephi的基本使用指南。下面将结合真实的节点文件与边文件&#xff0c;利用gephi绘制社会网络并计算相关测量指标。整个过程会…

我们都是宇宙的奇迹

我们都是独一无二的个体&#xff0c;是宇宙的奇迹 如果我不关注自我&#xff0c;那我在这个宏大的宇宙中有什么意义&#xff1f; 关于你的问题&#xff0c;我想没有一个简单的答案&#xff0c;因为不同的人可能有不同的看法和感受。有些人可能认为&#xff0c;如果不关注自我&…

jbdc的简单了解

JDBC JDBC所处的位置 JDBC的本质 Java操作数据库的一套接口。 补充 ddl:数据库定义语言,例如建表,创建数据库等。 dml:数据库操作语言,例如增删改。 dql:数据库查询语言,例如查询语句。 注意 在创建Java项目后的第一个步骤是导入jar包。 导入jar包的步骤 1 创建l…

【C语言】const修饰指针的不同作用

目录 const修饰变量 const修饰指针变量 ①不用const修饰 ②const放在*的左边 ③const放在*的右边 ④*的左右两边都有const 结论 const修饰变量 变量是可以修改的&#xff0c;如果把变量的地址交给⼀个指针变量&#xff0c;通过指针变量的也可以修改这个变量。 但…

TCP/IP详细介绍以及TCP/IP寻址

目录 ​编辑 1. TCP/IP 介绍 2. 计算机通信协议&#xff08;Computer Communication Protocol&#xff09; 3. 什么是 TCP/IP&#xff1f; 4. 在 TCP/IP 内部 5. TCP 使用固定的连接 6. IP 是无连接的 7. IP 路由器 8. TCP/IP 9. TCP/IP 寻址 10. IP地址 …

LeetCode、1137. 第 N 个泰波那契数【简单,动态规划】

文章目录 前言LeetCode、1137. 第 N 个泰波那契数【简单&#xff0c;动态规划】题目与分类思路一维动态规划 资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝2W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java后端技术…

记录下ibus-libpinyin输入法的重新安装

目前的版本为: 首先把现在的ibus-libpinyin卸了 sudo apt-get --purge remove ibus-libpinyin sudo apt-get autoremove 安装教程请参考 Installation libpinyin/ibus-libpinyin Wiki GitHub yilai sudo apt install pkg-config sudo apt-get install libglib2.0-de…

02-Web应用_架构构建_漏洞_HTTP数据包_代理服务器

Web应用_架构构建_漏洞_HTTP数据包_代理服务器 一、网站搭建前置知识1.1 域名1.2、子域名1.3、DNS二、web应用环境架构类三、web应用安全漏洞分类四、web请求返回过程数据包 五、演示案例5.1、架构-Web应用搭建-域名源码解析5.2、请求包-新闻回帖点赞-重放数据包5.3、请求包-移…
最新文章