面试 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.mzph.cn/news/666316.shtml

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

相关文章

两个重要极限【高数笔记】

【第一个:lim (sinx / x) 1, x -- > 0】 1.本质: lim (sin‘?’ / ‘?’) 1, ‘?’ -- > 0;保证‘?’ -- > 0,与趋向无关 2.例题&#x…

【ELK】logstash快速入门

1.概述 1.1.什么是logstash? 之前我们聊了es,并且用docker搭建了一个eskibana的环境。es目前最普遍的用法是用来存储日志的,然后结合kibana对日志做一些可视化的工作。既然要收集日志,就面临着一个问题: 各个系统的…

口味多样的碱水贝果面包,香气饱满松松软软

这两天在吃一款碱趣贝果面包,感觉味道很不错,它是一种加热一下就可以吃的手工面包,口感十分独特。这款面包有着清香有韧性的表皮,里面松软可口,加热后更是香气四溢。 除了标准的原味全麦之外,碱趣贝果面包还…

Python爬虫某云音乐歌手及下载其免费音乐

import os import re import threading import timefrom lxml import etreeimport requests from bs4 import BeautifulSoup from database import MyDataBase from utils import make_user_agent 注意:database和utils是自己写的。没有注释,不懂就问 先…

【大厂AI课学习笔记】1.4 算法的进步(3)关于Hinton

Geoffrey Hinton:深度学习之父的传奇人生与杰出贡献 在人工智能领域,有一位科学家的名字如同星辰般闪耀,他就是Geoffrey Hinton。作为深度学习的奠基人之一,Hinton的生涯充满了创新、突破和对未知的不懈探索。他的贡献不仅重塑了…

SpringBoot数据访问复习

SpringBoot数据访问复习 数据访问准备 引入jdbc所需要的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jdbc</artifactId></dependency> 原理分析 导入的启动器引入了两个…

【年度盛会征稿】第二届全国精准营养与生命健康创新大会(PNHIC 2024)

第二届全国精准营养与生命健康创新大会&#xff08;PNHIC 2024&#xff09; 【高层次专家齐聚交流&#xff0c;年度盛会&#xff01;】 近年来&#xff0c;人们对营养与健康愈加关注&#xff0c;精准营养学研究也成为一个快速发展的热点领域。“精准营养”研究借助多组学、可…

Qt程序设计-运行脚本文件.bat

Qt程序设计-运行脚本文件.bat 本文演示如何实现Qt运行脚本文件.bat 创建一个脚本文件 在D盘,新建一个test.txt文件,将下面的拷入,然后更改后缀名称为bat @echo off set filename=newfile.txt if not exist %filename% (echo This is a new file > %filename% ) else …

Android Studio开发配置(gradle配置)

文章目录 plugin:com.android.applicationgradle换源gradle下载AVD启动电脑蓝屏 刚安装android studio的话&#xff0c;如果直接创建项目&#xff0c;基本gradle编译不过去&#xff0c;会报错。 plugin:com.android.application 最开始我一直报错找不到插件&#xff0c;因为我…

MySQL进阶45讲【13】为什么表数据删掉一半,表文件大小不变?

1 前言 有些小伙伴在删数据库数据时&#xff0c;会产生一个疑问&#xff0c;我的数据库占用空间大&#xff0c;我把一个最大的表删掉了一半的数据&#xff0c;怎么表文件的大小还是没变&#xff1f; 那么这篇文章&#xff0c;就介绍一下数据库表的空间回收&#xff0c;看看如…

【链表】-Lc146-实现LRU(巧妙借助LinkedHashMap)

写在前面 最近想复习一下数据结构与算法相关的内容&#xff0c;找一些题来做一做。如有更好思路&#xff0c;欢迎指正。 目录 写在前面一、场景描述二、具体步骤1.环境说明2.代码 写在后面 一、场景描述 运用你所掌握的数据结构&#xff0c;设计和实现一个 LRU (Least Recently…

Linux Rootkit:内核 5.7+ 的新方法

Linux Rootkit&#xff1a;内核 5.7 的新方法 文章目录 [Linux Rootkit&#xff1a;内核 5.7 的新方法](https://xcellerator.github.io/posts/linux_rootkits_11/)这是怎么回事&#xff1f;ProcFS 更改Kallsyms 问题系统调用名称问题就这样…… 这是怎么回事&#xff1f; 早在…

如何把vue项目打包成桌面程序 electron-builder

引入 我们想要把我们写的vue项目,打包成桌面程序&#xff0c;我们需要使用electron-builder这个库 如何使用 首先添加打包工具 vue add electron-builder 选择最新版本 下载完毕 我们可以看到我们的package.json中多了几行 electron:build&#xff1a;打包我们的可执行程序 e…

vue实现二维数组表格渲染

在Vue中渲染二维数组表格可以采用嵌套的<template>和v-for指令。 写法一 <template> <table> <thead> <tr> <th v-for"(header, index) in headers" :key"index">{{ header }}</th> </tr> </t…

在 iOS 上安装自定企业级应用

了解如何安装您的组织创建的自定应用并为其建立信任。 本文适用于学校、企业或其他组织的系统管理员。 您的组织可以使用 Apple Developer Enterprise Program 创建和分发企业专用的 iOS 应用&#xff0c;以供内部使用。您必须先针对这些应用建立信任后&#xff0c;才能将其打…

服装品牌如何利用数字化工具提升商品管理效率

随着科技的快速发展&#xff0c;数字化工具在商品管理中的应用越来越广泛。数字化工具不仅可以提高商品管理的效率&#xff0c;还可以帮助企业更好地满足客户需求&#xff0c;提升市场竞争力。本文将探讨如何利用数字化工具提升商品管理效率。 一、建立数字化管理系统 数字化…

备战蓝桥杯---搜索(应用基础1)

话不多说&#xff0c;直接看题&#xff1a; 显然&#xff0c;我们直接用深搜&#xff0c;我们可以先把空位用结构体存&#xff0c;然后打表存小方块&#xff0c;再用数组存行列。 下面是AC代码&#xff1a; #include<bits/stdc.h> using namespace std; int a[12][12];…

【leetcode】1512. 好数对的数目(简单)题解学习

题目描述&#xff1a; 给你一个整数数组 nums 。 如果一组数字 (i,j) 满足 nums[i] nums[j] 且 i < j &#xff0c;就可以认为这是一组 好数对 。 返回好数对的数目。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3,1,1,3] 输出&#xff1a;4 解释&#xff1a;有 4 …

OSG程序如何适配在无显卡的Ubuntu系统中

最近&#xff0c;嵌入式机器需要搞一个使用OSG开发的程序&#xff0c;但是发现弄上去后&#xff0c;各种问题&#xff0c;非常头疼&#xff0c;所以我花费了很多时间去查阅资料&#xff0c;终于解决了这个问题&#xff0c;因此写一下博客&#xff0c;记录下这个问题&#xff0c…

linux中的gdb调试

gdb是在程序运行的结果与预期不符合时&#xff0c;可以使用gdb进行调试 注意&#xff1a;使用gdb调试时要在编译上加-g参数 gcc -g -c hello.c 启动gdb调试&#xff1a; gdb file 对gdb进行调试 设置运行参数&#xff1a; set args 可指定运行参数 show args 可以查…