JavaScript常见面试题(一)

news2024/11/26 22:32:43

文章目录

  • 1. JavaScript有哪些数据类型,它们的区别?
  • 2.数据类型检测的方式有哪些
  • 3. 判断数组的方式有哪些
  • 4.null和undefined区别
  • 5.typeof null 的结果是什么,为什么?
  • 6.intanceof 操作符的实现原理及实现
  • 7.为什么0.1+0.2 ! == 0.3,如何让其相等
  • 8.isNaN 和 Number.isNaN 函数的区别?
  • 9.==操作符的强制类型转换规则
  • 10.其他值到字符串的转换规则?
  • 11.其他值到数字值的转换规则?
  • 12.其他值到布尔类型的值的转换规则?
  • 13.Object.is() 与比较操作符 "===" “==” 的区别?
  • 14.JavaScript 中如何进行隐式类型转换?
  • 15.let、const、var的区别
  • 16.const对象的属性可以修改吗
  • 17.如果new一个箭头函数的会怎么样
  • 18.箭头函数与普通函数的区别
  • 19.箭头函数的this指向哪⾥?
  • 20.对 rest 参数的理解
  • 21.ES6中模板语法与字符串处理

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

分为简单数据类型和引用数据类型

  • 简单数据类型有:Numer,String,Boolean,Null,Undefined。
  • 引用数据类型:对象,数组,函数。
  • ES6新增Symbol(独一无二且不可变的数据类型),BigInt(表示任意精度格式的整数)。
  • 简单数据类型存储在栈中,引用数据类型存储在堆中。

2.数据类型检测的方式有哪些

  • typeof console.log(typeof ‘str’);
  • instanceof(只能正确判断引用数据类型) console.log(2 instanceof Number);
  • constructor console.log((2).constructor === Number);
  • Object.prototype.toString.call()

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

  • isArray(Array.isArray(arr) //true)
  • proto (arr.proto === Array.prototype //true)
  • constructor属性(arr.constructor === Array //true)
  • instanceof(arr instanceof Array //true)
  • toString(Object.prototype.toString.call(obj).slice(8, -1) === “Array” //true)
  • isPrototypeof(判断当前对象是否是另一个对象的原型) Array.prototype.isPrototypeOf(obj)

4.null和undefined区别

undefined 代表的含义是变量声明了未定义(未赋值),null 代表的含义是空对象。

  1. null转换为数值为0,undefined转化为数值为NAN。
  2. null通过typeof判断数据类型的输出结果为object,undefined为undefined。
  3. 访问不存在的dom节点,原型链上查找到顶端返回null,给函数传参没有传,访问对象中没有的属性返回undefined

5.typeof null 的结果是什么,为什么?

历史遗留问题,保留了下来。

6.intanceof 操作符的实现原理及实现

  1. 原理:获取对象的_proto__属性,然后沿着对象的原型链向上查找,看构造函数的prototype对象是否出现在对象的原型链上。

7.为什么0.1+0.2 ! == 0.3,如何让其相等

因为 JavaScript 使用 IEEE 754 双精度浮点数来表示数字,这种表示方式无法精确地存储某些十进制小数,从而导致精度问题。
使用 toFixed 或 toPrecision 将浮点数格式化为固定的小数位数,然后再进行比较。

8.isNaN 和 Number.isNaN 函数的区别?

  1. 函数 isNaN 接收参数后,会尝试将这个参数转换为数值,某些非数值的值可以直接转换成数值。任何不能转换为数值的值都会导致这个函数返回true。
    在这里插入图片描述

  2. 函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN。不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。
    在这里插入图片描述

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

  1. 如果两个操作数的类型相同(例如都是字符串、数字或布尔值),则直接进行比较。
  2. 如果一个操作数是对象,另一个不是,会尝试将对象转换为原始类型的值,然后再进行比较。
  3. 如果一个操作数是字符串,另一个是数字,则尝试将字符串转换成数字,然后进行比较。
  4. 如果一个操作数是布尔值,另一个是非布尔值,则将布尔值转换成数字(true 转换为 1,false 转换为 0),然后进行比较。
  5. 如果其中一个操作数是 null,另一个是 undefined,则它们相等。
  6. 如果其中一个操作数是 NaN,则返回 false,因为 NaN 不等于任何值,包括它本身。

10.其他值到字符串的转换规则?

  1. Null 和 Undefined 类型 ,null 转换为 “null”,undefined 转换为 “undefined”,
  2. Boolean 类型,true 转换为 “true”,false 转换为 “false”。
  3. Number 类型的值直接转换,不过那些极小和极大的数字会使用指数形式。

11.其他值到数字值的转换规则?

  1. Undefined 类型的值转换为 NaN。
  2. Null 类型的值转换为 0。
  3. Boolean 类型的值,true 转换为 1,false 转换为 0。
  4. String 类型的值转换如同使用 Number() 函数进行转换,如果包含非数字值则转换为 NaN,空字符串为 0。
  5. 对象(包括数组)会首先被转换为相应的基本类型值,如果返回的是非数字的基本类型值,则再遵循以上规则将其强制转换为数字。

12.其他值到布尔类型的值的转换规则?

以下这些是假值: • undefined • null • false • +0、-0 和 NaN • “”
假值的布尔强制类型转换结果为 false。从逻辑上说,假值列表以外的都应该是真值。

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

  • 使用双等号(==)进行相等判断时,如果两边的类型不一致,则会进行强制类型转化后再进行比较。
  • 使用三等号(===)进行相等判断时,如果两边的类型不一致时,不会做强制类型准换,直接返回 false。
  • 使用 Object.is 来进行相等判断时,一般情况下和三等号的判断相同,它处理了一些特殊的情况,比如 -0 和 +0 不再相等,两个 NaN 是相等的。

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

  • +操作符的两边有至少一个string类型变量时,两边的变量都会被隐式转换为字符串;其他情况下两边的变量都会被转换为数字。
  • ==操作符两边的值都尽量转成number
  • <和>比较符,如果两边都是字符串,则比较字母表顺序,其他情况下,转换为数字再比较。

15.let、const、var的区别

  • 块作用域由 { }包括,let和const具有块级作用域,var不存在块级作用域。
  • var存在变量提升,let和const不存在变量提升,即在变量只能在声明之后使用,否在会报错。
  • var声明的变量为全局变量,并且会将该变量添加为全局对象的属性,但是let和const不会。
  • var声明变量时,可以重复声明变量,后声明的同名变量会覆盖之前声明的遍历。const和let不允许重复声明变量。
  • 在使用let、const命令声明变量之前,该变量都是不可用的。这在语法上,称为暂时性死区。使用var声明的变量不存在暂时性死区。
    在这里插入图片描述

16.const对象的属性可以修改吗

  • const是用来定义常量的,而且定义的时候必须初始化,且定义后不可以修改。
  • const保证的并不是变量的值不能改动,而是变量指向的那个内存地址不能改动。对于基本类型的数据(数值、字符串、布尔值),其值就保存在变量指向的那个内存地址,对于引用类型的数据(主要是对象和数组)来说,变量指向数据的内存地址,保存的只是一个指针,const只能保证这个指针是固定不变的,至于它指向的数据结构是不是可变的,就完全不能控制了。

17.如果new一个箭头函数的会怎么样

箭头函数是ES6中的提出来的,它没有prototype,也没有自己的this指向,更不可以使用arguments参数,所以不能New一个箭头函数。

18.箭头函数与普通函数的区别

  1. 箭头函数比普通函数更加简洁(如果没有参数,就直接写一个空括号即可,如果只有一个参数,可以省去参数的括号,如果函数体的返回值只有一句,可以省略大括号)
  2. 箭头函数没有自己的this,它只会在自己作用域的上一层继承this
  3. 箭头函数继承来的this指向永远不会改变
  4. call()、apply()、bind()等方法不能改变箭头函数中this的指向
  5. 箭头函数不能作为构造函数使用(不能New)
  6. 箭头函数没有自己的arguments
  7. 箭头函数没有prototype(__proto__是当前对象的原型对象(隐式原型),而prototype是当前构造函数的原型对象(显式原型))

19.箭头函数的this指向哪⾥?

箭头函数不同于传统函数,它其实没有属于⾃⼰的 this,
它所谓的 this 是, 捕获其外层 上下⽂的 this 值作为⾃⼰的 this 值。

20.对 rest 参数的理解

rest参数是一种在函数定义中使用的特殊语法,它允许函数接受任意数量的参数,并将它们收集到一个数组中。

  • 在函数定义中,可以使用…语法来声明rest参数。
  • 通过使用rest参数,我们可以编写更灵活的函数,能够处理不确定数量的参数。

21.ES6中模板语法与字符串处理

  • ES6中的模板语法是一种更方便的字符串处理方式,它允许我们在字符串中插入变量,并且可以跨行书写。通过使用模板语法,我们可以更简洁地拼接字符串并提高代码的可读性。

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

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

相关文章

Ubuntu安装部署

Ubuntu安装部署 一、Ubuntu概述1、Ubuntu介绍2、Ubuntu特点 二、Ubuntu和Centos的区别1、Centos2、Ubuntu3、Centos和Ubuntu区别 三、安装Ubuntu-Server1、Ubuntu官网2、创建新的机子3、创建名称以及虚拟机在磁盘上的位置4、Ubuntu初始化和安装 四、安装Ubuntu1、开始安装2、安…

直流放大器

一&#xff0c;概念及存在问题 集成电路主要由半导体材料构成&#xff0c;其内部适合用二极管&#xff0c;三极管等类型的元器件制作&#xff0c;而不适用电容&#xff0c;电感和变压器&#xff0c;因此集成放大电路内部多个放大电路之间通常采用直接耦合。直接耦合电路除了可…

【产品应用】一体化步进伺服电机在吊装机器人中的应用

随着工业自动化和智能制造的发展&#xff0c;吊挂式智能巡检机器人逐渐成为许多工业场景中的重要角色。这类机器人不仅能够提升工作效率&#xff0c;减少人工干预&#xff0c;还能在复杂或危险环境中完成巡检任务。在这些机器人的设计与制造中&#xff0c;一体化步进伺服电机扮…

工业自动化领域常见的通讯协议

工业自动化领域常见的通讯协议&#xff0c;包括PROFINET、PROFIBUS、Modbus、Ethernet/IP、CANopen、DeviceNet和BACnet。通过分析这些协议的技术特点、应用场景及优势&#xff0c;比较它们在工业自动化中的性能和适用性&#xff0c;帮助选择最合适的协议以优化系统性能和可靠性…

C# Winform Datagridview控件使用和详解

DataGridView 是一种以表格形式显示数据的控件&#xff0c;由Rows(行)&#xff0c;Columns(列)&#xff0c;Cells(单元格)构成。本实例将综合利用DataGridView的属性和事件&#xff0c;展示不同的表格风格数据和操作。包含&#xff1a; 添加Datagridview行&#xff0c;列数据设…

探索C嘎嘎的奇妙世界:第三关---缺省参数与函数重载

在c语言中,我们常常在对有参函数进行传参,这样的繁琐过程,C祖师爷对此进行了相关改进,多说无益,上干货: 1 缺省参数: 缺省参数是指在声明或定义函数时为函数的形参指定一个默认值&#xff08;默认参数&#xff09;。在调用该函数时&#xff0c;如果没有指定实参&#xff0c;则…

【TB作品】基于51单片机的实验室通风,气体检测报警系统

作品功能分析 硬件部分 硬件&#xff1a; &#xff08;1&#xff09;51系列单片机&#xff0c;拟采用STC89C52RC&#xff1b; &#xff08;2&#xff09;DS18B20温度传感器&#xff1b; &#xff08;3&#xff09;二氧化碳浓度传感器&#xff1a;https://item.taobao.com/ite…

【git使用一】windows下git下载、安装和卸载

目录 &#xff08;1&#xff09;下载安装包 &#xff08;2&#xff09;安装git &#xff08;3&#xff09;安装验证 &#xff08;4&#xff09;卸载git &#xff08;1&#xff09;下载安装包 官网下载地址&#xff1a;Git 国内镜像下载地址&#xff1a;CNPM Binaries Mir…

proDAD V4最新版软件安装包下载+详细安装步骤

简介&#xff1a; proDAD Adorage 是一款一体化的效果库&#xff0c;完美拥有所有的效果&#xff0c;集所有Adorage卷于一体&#xff0c;该系列包含13种可用套装中的17,000多种效果。 对于每种情况都能获得完美的效果&#xff0c;支持Adobe、avid、Corel、Cyberlink、MAGIX等多…

windows10或者windows11怎么查看自己电脑显卡型号

win10系统&#xff1a; 右键单击任务栏后弹出菜单选择任务管理器 打开任务管理器后&#xff0c;点击性能查看左侧GPU0或者GPU1 如果有nvidia字样表示自己电脑有nvidia显卡&#xff0c;如果是AMD或者intel字样表示没有nvidia显卡。注意如果你有GPU0或者GPU1说明你电脑是双显卡&…

通过Vue3+高德地图的JS API实现市区地图渲染

效果图: 核心代码: <script setup>import { onMounted, onUnmounted } from vue;import AMapLoader from @amap/amap-jsapi-loader;import { message } from ant-design-vue;import school from @/assets/icons/school.svg;import enterprise from @/assets/icons/ent…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 停车场车位统计(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 停车场车位统计(100分) 🌍 评测功能需要订阅专栏后私信联…

【TB作品】基于STM32单片机的实验室器材管理登记二维码系统

这个单片机代码实现了一个实验室管理系统&#xff0c;该系统的主要功能包括记录和管理ID信息、日期和时间、以及显示这些信息到OLED屏幕上。以下是对代码主要功能的分析&#xff1a; 全局变量定义 定义了多个全局变量来存储系统状态、页面、密码、ID列表等信息。time 结构体用…

邮件钓鱼--前置-攻击防范 7 看

目录 1、什么是 SPF&#xff1a; 2、如何判断 SPF&#xff1a; 3.邮件钓鱼防范&#xff1a;7 看 1、什么是 SPF&#xff1a; SPF 记录&#xff1a;原理、语法及配置方法简介 (zhetao.com) SPF记录详解_spf写法-CSDN博客 发件人策略框架&#xff08;Sender Policy Frame…

搭建知识付费APP平台教学:在线教育系统源码详解

如何搭建一个高效的知识付费APP平台呢&#xff1f;今天&#xff0c;笔者将详细解析在线教育系统的源码&#xff0c;帮助您快速搭建自己的知识付费APP平台。 一、平台的核心功能 一个完整的知识付费APP平台通常需要具备以下核心功能&#xff1a; 用户管理 内容管理 支付 课…

MySQL 日志(二)

本篇将继续介绍MySQL日志的相关内容 目录 一、二进制日志 简介 注意事项 删除二进制日志 查看二进制日志 二进制日志的格式 二、服务器日志维护 一、二进制日志 简介 二进制日志中主要记录了MySQL的更改事件&#xff08;不包含SELECT和SHOW),例如&#xff1a;表的…

springer 在线投稿编译踩坑

springer投稿&#xff0c;在线编译踩坑总结 注意&#xff1a; 有的期刊需要双栏&#xff0c;而预定义的模板中可能为单栏&#xff0c;需要增加iicol选项。 例如&#xff1a; \documentclass[sn-mathphys-num]{sn-jnl}% —>\documentclass[sn-mathphys-num, iicol]{sn-jnl}…

【iOS】如何断点看系统方法在哪一个库

如何断点看系统方法在哪一个库 开源网站如何断点看系统方法在哪一个库1 下符号断点2 符号断点中输入 load &#xff0c;并且开启断点&#xff08;Enable&#xff09;。3 运行程序&#xff0c;触发断点&#xff0c;在堆栈信息中找到load方法&#xff0c;可以看到其在libobjc.A.d…

互联网应用主流框架整合之构建REST风格的系统

REST&#xff08;Representational State Transfer&#xff09;&#xff0c;中文译为“表述性状态转移”&#xff0c;是由Roy Fielding博士在他的博士论文中提出的一种软件架构风格&#xff0c;特别适用于网络应用的设计。REST不是一个标准&#xff0c;而是一种设计原则和约束集…

web错题(1)

action属性是form标签的必须属性&#xff0c;用于指定表单提交时表单数据将被发往哪里 dir能够指定文本显示方向的属性 可以产生下拉列表的标记时<select> multiple属性设为true&#xff0c;表示输入字段可以选择多个值 lable标签的for属性可以把lable绑定到另一个元…