JavaScript常见面试题(一)

文章目录

  • 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.rhkb.cn/news/351100.html

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

相关文章

计算机网络(8) Finite State Machines(有限状态机)

一.建立连接&#xff08;三次握手&#xff09; 建立连接过程中的状态转换如下&#xff1a; 客户端&#xff1a; 发送SYN CLOSED >>>>>>>>>>>>>>SYN SENT(第一次握手) 接收SYNACK发送ACK …

如何看懂SparkUI?

Jobs页面 Stage页面 显示额外的指标和摘要指标&#xff1a; 摘要指标&#xff08;Summary Metrics&#xff09;统计了所有完成的任务的执行行为&#xff0c;包括执行时间、GC时间、输入输出信息等&#xff0c;并提供了最小值&#xff08;Min&#xff09;、第25百分位数&#xf…

HCIA11 网络安全之本地 AAA 配置实验

AAA 提供 Authentication&#xff08;认证&#xff09;、Authorization&#xff08;授权&#xff09;和 Accounting&#xff08;计费&#xff09;三种安全功能。 • 认证&#xff1a;验证用户是否可以获得网络访问权。 • 授权&#xff1a;授权用户可以使用哪些服务。 •…

黑马头条Minio报错non-xml response from server错误的解决方法

今天在写项目的时候&#xff0c;想测试minio上传文件功能是否正常&#xff0c; 但是每次都出现non-xml response from server的错误。 自己也在网上找了很多解决方法&#xff0c;大部分是说用户名和密码的配置问题&#xff0c;但是检查后发现并没有错误。 最后发现是自己的dock…

QT 5.14.2 应用程序打包

我们可以直接通过开发工具预览我们的程序。但是当要把开发好的程序给别人使用的时候&#xff0c;我们就需要把程序打包成可执行的exe&#xff0c;然后把这个exe文件和其他相关的文件一起发给别人&#xff0c;这样别人就可以使用了。 一、生成可独立运行的exe (一)、编译程序的…

图论(一)之概念介绍与图形#matlab

图论&#xff08;一&#xff09;之概念介绍与图形目录 前言 一、图论介绍 二、基本概念 2.1图的概念 2.2图形分类 2.3邻接矩阵 2.3.1无向图 2.3.2有向图 2.3.3有向赋权图 2.4出度&#xff08;Outdegree&#xff09; 2.5入度&#xff08;Indegree&#xff09; 3.四种…

联想电脑 调节屏幕亮度不起使用,按F5,F6,屏幕上的hotkeys进度条是在改变,但是屏幕没有一些作用的处理方法

1、查看驱动是否正常 Win键X &#xff0c;设备管理器 发现似乎挺正常的。 查看原厂驱动&#xff1a;联想电脑管家 这样看来&#xff0c;驱动是没有问题了。 2、看看设置电池模式 其实还是这个电池模式的问题导致。 如果处于养护模式的话&#xff0c;充电只在75%~80%&#x…

【Numpy】一文向您详细介绍 np.round()

【Numpy】一文向您详细介绍 np.round() 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a;985高校的普通本硕&#xff0c;…

【大数据】计算引擎:Spark核心概念

目录 前言 1.什么是Spark 2.核心概念 2.1.Spark如何拉高计算性能 2.2.RDD 2.3.Stage 3.运行流程 前言 本文是作者大数据系列中的一文&#xff0c;专栏地址&#xff1a; https://blog.csdn.net/joker_zjn/category_12631789.html?spm1001.2014.3001.5482 该系列会成体…

【SpringCloud学习笔记】RabbitMQ(上)

1. RabbitMQ简介 官网地址&#xff1a;https://www.rabbitmq.com/ 2. 安装方式 安装前置准备&#xff1a; 此处基于Linux平台 Docker进行安装&#xff0c;前置准备如下&#xff1a; Linux云服务器 / 虚拟机Docker环境 安装命令&#xff1a; docker run \-e RABBITMQ_DEFAU…

TCP与UDP案例

udp不会做拆分整合什么的 多大就是多大

【日记】第一次养植物,没什么经验……(781 字)

正文 前两天梦见灵送的几盆植物全都死掉了。梦里好伤心。醒来与她说这件事&#xff0c;她宽慰我说&#xff0c;梦都是反着的&#xff0c;肯定能活得很好的。于是忽然记起昨天给植物换水时&#xff0c;文竹的根居然从花盆底部伸吊了出来&#xff0c;以前都没有这种情况来着&…

探索智慧校园,引领数字化教育浪潮

在21世纪的教育版图上&#xff0c;智慧校园进一步发展。这是一场深度融合信息技术与教育实践的深刻转型&#xff0c;它不仅仅是在校园里简单叠加智能设备&#xff0c;而是一种从教育理念到实践模式全方位的革新。智慧校园如同一座桥梁&#xff0c;连接着过去与未来&#xff0c;…

【OrangePiKunPengPro】 linux下编译、安装Boa服务器

OrangePiKunPengPro | linux下编译、安装Boa服务器 时间&#xff1a;2024年6月7日21:41:01 1.参考 1.boa- CSDN搜索 2.Boa服务器 | Ubuntu下编译、安装Boa_ubuntu安装boa-CSDN博客 3.i.MX6ULL—ElfBoard Elf1板卡 移植boa服务器的方法 (qq.com) 2.实践 2-1下载代码 [fly752fa…

算法设计与分析 实验1 算法性能分析

目录 一、实验目的 二、实验概述 三、实验内容 四、问题描述 1.实验基本要求 2.实验亮点 3.实验说明 五、算法原理和实现 问题1-4算法 1. 选择排序 算法实验原理 核心伪代码 算法性能分析 数据测试 选择排序算法优化 2. 冒泡排序 算法实验原理 核心伪代码 算…

【Pycharm】设置双击打开文件

概要 习惯真可怕。很多小伙伴用习惯了VsCode开发&#xff0c;或者其他一些开发工具&#xff0c;然后某些开发工具是单击目录文件就能打开预览的&#xff0c;而换到pycharm后&#xff0c;发现目录是双击才能打开预览&#xff0c;那么这个用起来就特别不习惯。 解决办法 只需一…

摄影师在人工智能竞赛中与机器较量并获胜

摄影师在人工智能竞赛中与机器较量并获胜 自从生成式人工智能出现以来&#xff0c;由来已久的人机大战显然呈现出一边倒的态势。但是有一位摄影师&#xff0c;一心想证明用人眼拍摄的照片是有道理的&#xff0c;他向算法驱动的竞争对手发起了挑战&#xff0c;并取得了胜利。 迈…

大疆Pocket3手持记录仪格式化恢复方法

大疆Pocket系列是手持类产品&#xff0c;此类产品处理过不少像Pocket、Pocket2、Pocket3基本上涉及Pocket全系列&#xff0c;今天来看一个Pocket3误格式化之后的恢复方法。 故障存储: 120G存储卡 /文件系统&#xff1a;exFAT 故障现象: 在备份视频数据时由于操作失误导致初…

【云岚到家】-day03-1-门户等缓存方案选择

【云岚到家】-day03-1-门户-缓存方案选择 1 门户1.1 门户简介1.2 常见的技术方案1.2.1 需求1.2.2 常见门户1.2.2.1 Web门户1.2.2.2 移动应用门户1.2.2.3 总结 2 缓存技术方案2.1 需求分析2.1.1 界面原型2.2.2 缓存需求 3 SpringCache入门3.1 基础概念3.1.1 Redis客户端3.1.2 Sp…

【linux】Linux分析cpu问题

CPU使用率高怎么分析&#xff1a; 首先先看哪些线程占用资源高看每个线程在干啥&#xff08;类似windows系统的任务管理器&#xff09; 步骤&#xff1a; 定位应用进程 pid jps -l # 查看进程找到线程 tid top -Hp {pid}将 tid 转换成十六进制 printf "%x\n" {…