(数据类型)前端八股文修炼Day1

1.JavaScript有哪些数据类型,它们的区别

JavaScript中有以下种数据类型:

基本数据类型(Primitive Data Types):

  • String:表示文本数据,用单引号(')或双引号(")括起来。
  • Number:表示数字,包括整数和浮点数。
  • Boolean:表示逻辑值,即true或false。
  • Null:表示一个空值。 - Undefined:表示一个未定义的值。
  • Symbol(ES6新增):表示唯一的、不可变的值。
    引用数据类型(Reference Data Types):
  • Object:表示复杂数据结构,可以包含多个键值对。
    这些数据类型在 JavaScript 中有着不同的特点和用途:
  • Function: 作为一种特殊的数据类型,用于封装可重用的代码块,实现特定功能,是 JavaScript 中的重要组成部分。

基本数据类型在赋值、传递时是按值传递,即会创建一个新的值,原始值不受影响。

引用数据类型在赋值、传递时是按引用传递,即只是传递了指向对象的引用,多个变量可能指向同一个对象,修改其中一个会影响其他变量。

另外,JavaScript中的数据类型是动态的,变量的数据类型可以根据赋予的值自动改变。这种动态类型特性使得 JavaScript 在开发过程中更加灵活,但也需要开发者注意数据类型的转换和处理,以避免意外的问题。

2.数据类型检测的方式?

3.有哪些判断数组的方式?

4. null和undefined区别 typeof null 的结果是什么,为什么?

  • null:
    null 是一个表示“空”的值,用于指示变量未被赋值或者表示空对象引用。
    当我们想明确地表示一个变量为空时,可以将其赋值为 null。
    例如:let myVar = null;
  • undefined:
    undefined 表示一个变量声明了但未被赋值,或者访问对象属性不存在时返回的值。
    在 JavaScript 中,未初始化的变量会被默认赋值为 undefined。
    例如:let myVar; // myVar 的值为 undefined

对于 typeof null 的结果是 ‘object’,这是 JavaScript 设计上的一个历史遗留问题。在 JavaScript 的早期版本中,null 的二进制表示全为 0,而对象的二进制表示最后三位也为 0,因此 typeof null 返回 ‘object’。这个问题至今尚未修复,仍然存在于现代的 JavaScript 解释器中。
因此,虽然 null 是一个基本数据类型,但 typeof null 返回 ‘object’,这是 JavaScript 的一个特殊情况,开发者在使用 typeof 操作符时需要注意这个细节。

5.intanceof 操作符的实现原理

instanceof 操作符用于检查一个对象是否是一个特定类型(class 或者 constructor function)的实例。其实现原理是通过检查对象的原型链来确定对象的类型,即判断对象的原型链上是否存在指定类型的原型。
当使用 obj instanceof Constructor 这种形式进行检查时,JavaScript 引擎会沿着 obj 的原型链向上查找,看 Constructor.prototype 是否在 obj 的原型链上。如果在原型链上找到了 Constructor.prototype,则返回 true,否则返回 false。

6. 实现为什么0.1+0.2 ! == 0.3,如何让其相等?

这涉及到 JavaScript 浮点数精度的问题。在 JavaScript 中,所有数字都使用双精度浮点数表示,这会导致浮点数计算时出现精度丢失问题。因此,0.1 + 0.2 的结果并不精确等于 0.3,而是一个非常接近但不完全相等的值。

要解决这个问题,通常可以通过以下方法来处理:

1.转换为整数计算:将小数转换为整数,完成计算后再转回小数。
let result = (0.1 * 10 + 0.2 * 10) / 10; // 结果为 0.3
2.使用库函数:可以使用一些库函数或工具来处理精确计算,例如使用 BigDecimal.js、math.js 等库来进行精确计算。
3.比较误差范围:由于浮点数计算精度问题,可以比较两个浮点数之间的差值是否在一个很小的范围内来判断它们是否相等,而不是直接使用严格相等比较。

7.如何获取安全的 undefined 值?

  • 声明不赋值
    let a;
  • 返回 void 0
    let safeUndefined = void 0
  • 传递 undefined 作为参数:在某些情况下,将 undefined 明确传递给函数或方法也可以获得安全的 undefined 值。

8. typeof NaN 的结果是什么?isNaN 和 Number.isNaN 函数的区别?

  • isNaN:
    isNaN() 函数用来判断一个值是否是 NaN。
    当参数为非数值类型时,会先尝试将其转换为数值,然后判断是否是 NaN。
    例如,isNaN(‘hello’) 会返回 true,因为 ‘hello’ 会被转换为 NaN。
  • Number.isNaN:
    Number.isNaN() 是 ES6 新增的用于判断一个值是否为 NaN 的方法。
    与 isNaN() 不同的是,Number.isNaN() 不会尝试将参数转换为数值,只有当参数是真正的 NaN 时才会返回 true。
    例如,Number.isNaN(‘hello’) 会返回 false,因为 ‘hello’ 不是真正的 NaN。

总的来说,Number.isNaN() 更加严格和准确,只有当参数是 NaN 时才会返回 true,不会发生类型转换。而 isNaN() 在判断非数值类型时会进行类型转换,可能会导致一些意想不到的结果。因此,在判断一个值是否为 NaN 时,推荐优先使用 Number.isNaN()。

9. == 操作符的强制类型转换规则?

其他值到字符串的转换规则?
其他值到数字值的转换规则?
其他值到布尔类型的值的转换规则?
当使用 == 操作符比较两个值时,会根据以下规则进行强制类型转换:

  • 其他值到字符串的转换规则:
    如果其中一个操作数是字符串,另一个操作数会被转换为字符串。
    数字和布尔值转换为相应的字符串,例如 1 转换为 ‘1’,true 转换为 ‘true’。
    null 和 undefined 分别转换为 ‘null’ 和 ‘undefined’。
    对象会调用其 toString 方法进行转换,如果没有则调用 valueOf 方法。如果两个方法都没有返回原始值,则默认转换为 ‘[object Object]’。
  • 其他值到数字值的转换规则:
    如果其中一个操作数是数字,另一个操作数会被转换为数字。
    布尔值转换为数字时,true 转换为 1,false 转换为 0。
    字符串转换为数字时,会尝试解析字符串为数字,如果无法解析则转换为 NaN。
    null 转换为 0,undefined 转换为 NaN。
    对象会调用其 valueOf 方法进行转换,如果没有则调用 toString 方法。如果两个方法都没有返回原始值,则转换为 NaN。
  • 其他值到布尔类型的值的转换规则:
    布尔值保持不变。
    数字中只有 0 和 NaN 被转换为 false,其他数字都被转换为 true。
    字符串中只有空字符串 ‘’ 被转换为 false,其他字符串都被转换为 true。
    null、undefined 和 NaN 被转换为 false。
    对象会被转换为 true,无论对象是什么。
    这些转换规则适用于 JavaScript 中的类型转换,当需要将一个值转换为不同类型时,根据上述规则进行转换。

10. || 和 && 操作符的返回值?

这些逻辑运算符在实际开发中经常用于条件判断和简化代码逻辑。当其中一个操作数可以确定整个表达式的结果时,JavaScript 引擎会短路计算,即不会对第二个操作数进行求值,从而提高运行效率。

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

Object.is() 方法和 === 操作符都是严格相等的比较方式,不会进行类型转换,而 == 操作符是松散相等的比较方式,可能会进行类型转换,因此在比较值时,优先考虑使用 Object.is() 或 === 来确保更准确的比较结果。

12.什么是 JavaScript 中的包装类型?

在 JavaScript 中,包装类型是指将基本数据类型(如数字、字符串、布尔值)包装成对象的过程。JavaScript 提供了三种包装类型:String、Number 和 Boolean。当我们尝试在基本数据类型上调用对象方法时,JavaScript 会临时将基本数据类型转换为包装类型,以便我们可以调用对象的方法。
虽然我们可以像操作对象一样操作包装类型的实例,但它们并不是完全相同的。包装类型是临时创建的对象,每次访问该值时都会创建一个新的包装对象,因此在比较包装对象时可能会遇到一些意外的行为。在一般情况下,推荐直接使用基本数据类型而非包装类型,除非需要调用对象方法或者明确需要对象的特性。

13.JavaScript 中如何进行隐式类型转换?

JavaScript 中的隐式类型转换是指在某些操作中,JavaScript 引擎会自动将一个数据类型转换为另一种数据类型。这种类型转换是由 JavaScript 引擎根据操作符和操作数的类型来执行的,并不需要显式地指定转换动作。

以下是一些常见的隐式类型转换情况:

  • 字符串转换:当一个非字符串类型的值与字符串相加时,非字符串类型会被自动转换为字符串类型。
    var num = 10;
    var str = "The number is: " + num; // num 会被转换为字符串,str 的值为 “The number is: 10”
  • 数字转换:当一个非数字类型(除了符号 -)的值参与数学运算时,会被自动转换为数字类型。
    var result = “10” * 2; // 字符串 “10” 会被转换为数字 10,result 的值为 20
  • 布尔值转换:在需要布尔值的地方(如条件判断、逻辑运算等),JavaScript 会将其他类型的值自动转换为布尔值。
    if (“hello”) {
    // “hello” 被转换为 true,执行这里的代码
    }
  • 比较操作符中的转换:在使用比较操作符时,JavaScript 会根据操作数的类型做出相应的转换。
    console.log(10 == ‘10’); // 字符串 ‘10’ 会被转换为数字 10,结果为 true
    虽然 JavaScript 中的隐式类型转换可以方便编码,但有时也会导致一些意外的行为,因此在编写代码时应该注意类型转换的规则,以避免出现不必要的错误。

15.为什么会有BigInt的提案?

BigInt 的提案是为了解决 JavaScript 中整数表示范围的限制。在 JavaScript 中,普通的数字类型(Number)使用双精度浮点数(64 位)表示,因此有一个固定的范围,超过这个范围的整数就会丢失精度。

BigInt 类型允许表示更大范围的整数,它可以安全地存储和操作超出普通数字类型表示范围的整数值。BigInt 可以表示任意精度的整数,只受限于计算机内存的限制。

BigInt 的提案引入了一种新的数据类型,通过在数字后面添加 n 来创建 BigInt:

const bigIntValue = 1234567890123456789012345678901234567890n;
BigInt 类型的引入使得 JavaScript 能够更好地处理大整数计算,如加密算法、大型数据集合等领域,提高了 JavaScript 在处理整数运算上的灵活性和准确性。BigInt 类型也能够解决一些传统数字类型无法处理的精度问题,使 JavaScript 在处理整数计算上更加强大和可靠。

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

.Object.assign() 和扩展运算符在 JavaScript 中都用于对象的浅拷贝,但它们之间有一些区别:

  • 区别:
    1、语法:
    Object.assign(target, …sources) 是一个方法,第一个参数是目标对象,后面的参数都是源对象。
    扩展运算符 … 通常用于展开数组或对象,语法更简洁,直接在对象字面量或数组字面量中使用。
    2、应用场景:
    Object.assign() 适用于将多个源对象的属性复制到目标对象中,并返回目标对象。
    扩展运算符通常用于快速复制对象或数组的内容,通常在对象字面量、数组字面量、函数调用或解构赋值中使用。
    3、返回值:
    Object.assign() 方法会返回目标对象本身,源对象的属性会被复制到目标对象中。
    扩展运算符不会修改现有对象,而是创建一个新的对象或数组。

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

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

相关文章

2024年阿里云优惠活动整理_云服务器活动大全

2024阿里云优惠活动大全包括云服务器优惠价格、优惠券免费领取入口、域名优惠口令、域名优惠、云数据库优惠活动、对象存储OSS优惠活动、企业邮箱优惠、阿里云建站优惠、无影云电脑优惠价格、CDN特惠等,阿里云服务器网aliyunfuwuqi.com长期更新阿里云优惠活动大全&a…

哈希表(c++)

1、介绍 哈希表,也称为散列表,是一种非常高效的数据结构。它通过将键(Key)映射到数组的特定位置来快速查找、插入和删除数据。这个映射过程由哈希函数(Hash Function)完成,该函数将键转化为一个…

【浅尝C++】C++基础第三弹=>内联函数/auto关键字/范围for/nullptr(含如何查看内联函数展开效果)

🏠专栏介绍:浅尝C专栏是用于记录C语法基础、STL及内存剖析等。 🚩一些备注:之前的文章有点杂乱,这里将前面的知识点重新组织了,避免了过多冗余的废话。 🎯每日努力一点点,技术变化看…

【已解决】MySQL(Navicat)中如何一次性执行多个sql脚本文件

目录 问题现象: 问题分析: 思路: 解决方法: 1、运行cmd命令窗口 2、执行文本文件内容合并命令 总结: 1、使用文本文件内容合并命令,将多个sql脚本文件的内容合并到一个新的sql文件中去。 2、然后在Nav…

《由浅入深学习SAP财务》:第2章 总账模块 - 2.1 基础知识

2.1.1 总账模块的基本功能 总账模块(General Ledger,GL)是“总分类账会计模块”的中文简称,它是财务会计(FI)模块的一个子模块,它是一切会计事务处理的核心模块。 它的基本功能有会计科…

3、Jenkins持续集成-Jenkins安装和插件管理

文章目录 一、Jenkins安装1. 安装JDK2. 获取jenkins安装包3. 安装包上传到服务器,进行安装4. 修改Jenkins配置(1)低版本Jenkins的rpm包(2)高版本Jenkins的rpm包 5. 启动Jenkins6. 打开浏览器访问7. 获取并输入admin账户…

1240. 完全二叉树的权值

给定一棵包含 N 个节点的完全二叉树,树上每个节点都有一个权值,按从上到下、从左到右的顺序依次是 A1,A2,⋅⋅⋅AN,如下图所示: 现在小明要把相同深度的节点的权值加在一起,他想知道哪个深度的节点权值之和最大&#x…

在抖音上开店,运营什么产品好卖?市场才是关键点!

大家好,我是电商小布。 很多来加入抖音小店的新手朋友,都是看到了这个项目的发展情况,并认为未来的发展也是不错的。 但是很多朋友在入驻的时候,是并没有搞清楚自己要来玩什么,要卖什么的。 而这个是我们在开店之前…

c++的学习之路:3、入门(2)

一、引用 1、引用的概念 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空 间,它和它引用的变量共用同一块内存空间。 怎么说呢,简单点理解就是你的小名,家里人叫你小名&#…

EI级!高创新原创未发表!VMD-TCN-BiGRU-MATT变分模态分解卷积神经网络双向门控循环单元融合多头注意力机制多变量时间序列预测(Matlab)

EI级!高创新原创未发表!VMD-TCN-BiGRU-MATT变分模态分解卷积神经网络双向门控循环单元融合多头注意力机制多变量时间序列预测(Matlab) 目录 EI级!高创新原创未发表!VMD-TCN-BiGRU-MATT变分模态分解卷积神经…

最长公共子序列详解:状态表示的两种方法

本题链接&#xff1a;897. 最长公共子序列 - AcWing题库 给定两个长度分别为 N 和 M 的字符串 A 和 B&#xff0c;求既是 A 的子序列又是 B 的子序列的字符串长度最长是多少。 本题分析如下图&#xff0c;对于状态可以分两种情况讨论 #include<iostream> #include<cst…

递归和递推的区别

目录 1、递推 2、递归 3、结言 递归 递推 1、递推 递推就是说从初值出发后一直运算到所需的结果。 ——从已知到未知。&#xff08;从小到大&#xff09; 举一个简单的例子&#xff1a; 每天能学习一个小时的编程&#xff0c;那么一个月之后可以学到三十小时的编程知识。…

mysql面试,事务四大特性,mvcc版本控制,3个重要日志,索引结构,索引失效,innodb引擎执行流程,主从复制,锁,page页

大纲 事务4大特性 https://blog.csdn.net/king_zzzzz/article/details/136699546 Mvcc多版本控制 https://blog.csdn.net/king_zzzzz/article/details/136699546 3个重要日志 https://blog.csdn.net/king_zzzzz/article/details/136868343 索引 mysql 索引&#xff08;…

MySQL面试题--最全面-索引

目录 一、索引 1.MySQL是如何让实现的索引机制&#xff1f; 2.InnoDB索引与MyISAM索引实现的区别是什么&#xff1f; 3.一个表中如果没有创建索引&#xff0c;那么还会创建B树吗&#xff1f; 4.说一下B树索引实现原理&#xff08;数据结构&#xff09; 5.聚簇索引与非聚簇…

【数据挖掘】实验4:数据探索

实验4&#xff1a;数据探索 一&#xff1a;实验目的与要求 1&#xff1a;熟悉和掌握数据探索&#xff0c;学习数据质量分类、数据特征分析和R语言的主要数据探索函数。 二&#xff1a;实验内容 1&#xff1a;数据质量分析 2&#xff1a;统计量分析 3&#xff1a;贡献度分析…

2024.3.23

1、使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c;密码是否…

Linux :环境基础开发工具

目录: 1. Linux 软件包管理器 yum 1. 什么是软件包 2. 查看软件包 3. 如何安装软件 4. 如何卸载软件 2. Linux开发工具 1. Linux编辑器-vim的基本概念 2. vim使用 3. vim的基本操作 4. vim正常模式命令集 5. vim末行模式命令集 6. 简单vim配置 3. Linux编译器-gcc/…

【Entity Framework】 EF中DbContext类详解

【Entity Framework】 EF中DbContext类详解 一、概述 DbContext类是实体框架的重要组成部分。它是应用域或实例类与数据库交互的桥梁。 从上图可以看出DbContext是负责与数据交互作为对象的主要类。DbContext负责以下活动&#xff1a; EntitySet&#xff1a;DbContext包含…

体育竞赛成绩管理系统设计与实现|jsp+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW&#xff0c;文末可获取本项目的所有资料。 推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java&#xff0c;…

什么是皮尔逊、斯佩尔曼和肯德尔相关性系数

代码实现&#xff1a; import numpy as np from scipy.stats import pearsonr, spearmanr,kendalltau #什么是皮尔逊、斯佩尔曼和肯德尔相关性系数 # 生成示例数据 x np.array([1, 2, 3, 4, 5]) y np.array([5, 6, 7, 8, 7])# 计算皮尔逊相关系数 pearson_coef, pearson_p …
最新文章