js面试---数据类型

1、js有哪些数据类型?有什么区别

        js一共有Undefined、Null、Boolean、Number、String、Object、Symbol、BigInt,八种数据类型。

        Symbol:ES6新增数据类型,代表创建后独一无二且不可变的数据类型,主要是为了解决可能出现的全局变量冲突的问题。

        BigInt:是一种数字类型数据,可以表示任意精度格式的整数,可以安全地存储和操作大整数。

        其中,Undefined、Null、Boolean、Number、String是基础数据类型;对象、数组和函数是引用数据类型。两种数据类型的区别在于存储的位置不同,基础数据类型直接存储在栈中的简单数据段,占据空间小、大小固定;引用数据类型存储在堆中的对象,占据空间大、大小不固定,引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体。

2、数据类型的检测方式

        typeof

console.log(typeof 2);                               // number

        instanceof

console.log('str' instanceof String);                // false 

        constructor

console.log((2).constructor === Number);             // true

        Object.prototype.toString.call()

var a = Object.prototype.toString;
console.log(a.call(2));

3、判断数组的方式

         Object.prototype.toString.call()

const obj = [1,2,3]
Object.prototype.toString.call(obj).slice(8,-1) === 'Array';   // true

        通过原型链做判断

const obj = [1,2]
obj.__proto__ === Array.prototype;  // true

         Array.isArray()

const obj = [1,2,3]
Array.isArray(obj);  // true

        instanceof

const obj = [1,2,3]
obj instanceof Array  // true

        Array.prototype.isPrototypeOf

const obj = [1,2,3]
Array.prototype.isPrototypeOf(obj)  // true

4、null和undefined的区别

         undefined代表的是未定义,null代表的是空对象。一般在变量声明了还没有定义的时候,会返回undefined,null主要用于变量的初始化,赋值给一些可能会返回对象的变量。用typeof判断时,null会返回object,而undefined返回undefined。

null == undefined      // true
null === undefined     // false

5、typeof null 的值是什么

        typeof null 的值是 object

        null的值是机器码null指针(null指针的值全是0),即null的类型标签时000,和Object的类型标签一样,所以typeof null 的值是Object。

6、typeof undefined的值是什么

        typeof undefined 的值是undefined

        undefined的值是(-2)30,是一个超出证书范围的数字,所以typeof undefined的值是undefined。 

7、instanceof操作符的实现原理及实现

        instanceof运算符用于判断构造函数的prototype属性是否出现在对象的原型链中的任何位置。

function myInstanceof(left, right) {// 获取对象的原型let proto = Object.getPrototypeOf(left)// 获取构造函数的 prototype 对象let prototype = right.prototype; // 判断构造函数的 prototype 对象是否在对象的原型链上while (true) {if (!proto) return false;if (proto === prototype) return true;// 如果没有找到,就继续从其原型上找,Object.getPrototypeOf方法用来获取指定对象的原型proto = Object.getPrototypeOf(proto);}
}

8、如何安全的获取undefined值

        因为undefined是一个标识符,所以可以被当作变量来使用和赋值,但是这样会影响undefined的正常判断。void不改变表达式的结果,只是让表达式不返回值。因此可以用void 0 来获得undefined。

9、typeof NaN的结果

        NaN指不是一个数字,用于指出数字类型中的错误情况。

        typeof NaN的结果是Number

        NaN是一个特殊值,它和自身不相等,是唯一一个非自反的值。而NaN !== NaN 为true。

10、isNaN和Number.isNaN函数的区别

        isNaN接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的值都会返回为true,非数字值传入也会返回true,会影响NaN的判断。

        Number.isNaN会首先判断传入的参数是否为数字,如果是数字再继续判断是否为NaN,不会进行数据类型的转换,对结果更为准确。

11、== 操作符的强制类型转换规则

        对于 == 来说,如果双方的数据类型不同,会先进行数据类型转换。判断规则如下:

                a、判断两者类型是否相同,相同的话就比较二者大小

                b、类型不同,就进行类型转换

                c、会先判断是否再比对null和undefined,是的话就返回true

                d、判断两者类型是否为string和Number,是的话,就将string转换为Number

                e、判断一方是否为boolean,是的话就把boolean转为number再判断

                f、判断一方是否为Object,且另一方为string、number或Symbol,是的话就把Object转换为基础数据类型,再进行转换。

12、其他值到字符串的转换规则

        null转换为"null",undefined转换为"undefined";

        true 转换为 "true",false 转换为 "false";

        Number直接转换,不过那些极小和极大的数字会使用指数形式;

        Symbol直接转换,但是只允许显式强制类型转换,使用隐式强制类型转换会产生错误。

13、其他值到Number的转换规则

        null转换为0,undefined转换为 NaN;

        true 转换为 1,false 转换为 0;

        String的非数字值则转换为 NaN,空字符串为 0;

        Symbol不能转换;

        对象、数组首先被转换为相应的基本类型值,如果返回的是非数字的基本类型值,则再遵循以上规则将其强制转换为数字。

14、其他值到布尔的转换规则

        只有undefined、null、false、0、NaN、""会被转换为false,其他均为true。

15、Object.is()和==、===的区别

        双等号(==)进行相等判断时,如果两边的类型不一致,则会进行强制类型转化后再进行比较;

        三等号(===)进行相等判断时,如果两边的类型不一致时,不会做强制类型准换,直接返回 false;

        Object.is()来进行相等判断时,一般情况下和三等号的判断相同,它处理了一些特殊的情况,比如 -0 和 +0 不再相等,两个 NaN 是相等的。

16、+操作符什么时候用于字符串的拼接

        如果 + 的其中一个操作数是字符串(或者通过以上步骤最终得到字符串),则执行字符串拼接,否则执行数字加法。对于除了加法的运算符来说,只要其中一方是数字,那么另一方就会被转为数字。

17、为什么会出现BigInt

        avaScript中Number.MAX_SAFE_INTEGER表示最⼤安全数字,计算结果是9007199254740991,即在这个数范围内不会出现精度丢失(⼩数除外)。但是⼀旦超过这个范围,js就会出现计算不准确的情况,这在⼤数计算的时候不得不依靠⼀些第三⽅库进⾏解决,因此官⽅提出了BigInt来解决此问题。

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

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

相关文章

【截至2023年底】语言模型的发展

什么是大语言模型LLM?ChatGPT、LLAMA各自有什么优势? from: https://www.youtube.com/watch?vt6qBKPubEEo github: https://github.com/Mooler0410/LLMsPracticalGuide 来自这篇survey,但据说还在更新,到…

数据结构——线性表(顺序存储结构)

语言:C语言软件:Visual Studio 2022笔记书籍:数据结构——用C语言描述如有错误,感谢指正。若有侵权请联系博主 一、线性表的逻辑结构 线性表是n个类型相同的数据元素的有限序列,对n>0,除第一元素无直接…

设置MariaDB,创建新库,新用户并授权其可以从任何主机登录

OS:CENTOS 7 1、从系统进入MariaDB # mysql -u root -p 这里的root是指MariaDB的管理员用户,和系统的root不搭边,只是同名而已。 2、看下有哪些库、用户 MariaDB [(none)]> show databases; MariaDB [(none)]>select user,host from mysql.us…

MySQL:关于数据库的一些练习题

文章目录 前面的内容已经把数据库的一些必要知识已经储备好了,因此下面就对于这些语句进行一些练习: 批量插入数据 insert into actor values (1, PENELOPE, GUINESS, 2006-02-15 12:34:33), (2, NICK, WAHLBERG, 2006-02-15 12:34:33);SQL202 找出所有…

学习R语言第二天

R语言可以做什么 1.数据分析 R语言如何使用 1. 请看我的操作方式 2. 如何获取当前路径 -- 获取当前路径 > getwd() [1] "E:/R/RWorkSpace/day01" -- 修改当前路径 > setwd(dir "E:/R") > getwd() [1] "E:/R" 3.查看当下数据值的信…

java的this关键字 and 构造器

文章目录 构造器构造器的特点this关键字举个例子吧其他链接 不难理解,so easy!!! 构造器 People people new People(); // People类型:决定着对象的类型(在内存中的构造形式) // people对象名称,在栈内存当中 // new…

UT单元测试

Tips:在使用时一定要注意版本适配性问题 一、Mockito 1.1 Mock的使用 Mock 的中文译为仿制的,模拟的,虚假的。对于测试框架来说,即构造出一个模拟/虚假的对象,使我们的测试能顺利进行下去。 Mock 测试就是在测试过程…

Android 允许其他应用读取本应用的私有目录

在Android中,应用默认是封闭的,不允许其他应用访问自己的私有目录。但是,如果你想要让其他应用能够访问你的应用中的某些文件,你可以使用FileProvider类来实现这一功能。 以下是使用FileProvider的步骤: 1. 在你的应…

SAP Fiori开发中的JavaScript基础知识12 - 闭包,模块模式,回调函数

1. 前言 本文将介绍JavaScript中几个高阶的知识点:闭包,模块和回调。 2. 闭包 在JavaScript中,闭包是一个非常强大的特性,它允许函数记住并访问它的词法作用域,即使它在词法作用域之外执行。 简单来说,…

【CVE-2023-38831】进行钓鱼攻击的研究

本文仅仅是对相关漏洞利用的学习记录,请各位合法合规食用! WinRAR是一款文件压缩器,该产品支持RAR、ZIP等格式文件的压缩和解压等。WinRAR在处理压缩包内同名的文件与文件夹时代码执行漏洞,攻击者构建由恶意文件与非恶意文件构成的特制压缩包文件,诱导受…

C# wpf 嵌入外部程序

WPF Hwnd窗口互操作系列 第一章 嵌入Hwnd窗口 第二章 嵌入WinForm控件 第三章 嵌入WPF控件 第四章 嵌入外部程序(本章) 第五章 底部嵌入HwndHost 文章目录 WPF Hwnd窗口互操作系列前言一、如何实现?1、定义属性2、进程嵌入(1&…

AugmentedReality之路-平面检测(5)

本文介绍通过AR检测水平平面和垂直平面,并将检测到的平面转化为Mesh 1、在首页添加功能入口 在首页添加一个按钮,命名为Start World Track 2、自定义ExecStartAREvent 创建ARSessionConfig并取名为ARSessionConfig_World 自定义ExecStartAREvent&…

大话设计模式之迭代器模式

迭代器模式是一种行为设计模式,它允许客户端逐个访问集合中的元素,而不暴露集合的底层表示。这种模式提供了一种方法来访问聚合对象中的各个元素,而不需要暴露其内部结构。 迭代器模式由以下几个关键角色组成: 迭代器&#xff08…

React 使用 three.js 加载 gltf 3D模型 | three.js 入门

系列文章 示例项目(gitcode):https://gitcode.com/qq_41456316/simple-react-three-demo 文章目录 系列文章前言一、three.js是什么?二、使用 React 和 three.js 加载 glTF 3D 模型的步骤步骤 1:创建 React 应用步骤 2:安装 thre…

实现ElasticSearch搜索自动补全【同附Java代码实现和拼音分词器安装】

文章目录 1、简介2、拼音分词器3、自定义分词器4、自动补全查询5、实现酒店搜索框自动补全5.1、修改酒店映射结构5.2、修改HotelDoc实体5.3、重新导入5.4、自动补全查询的JavaAPI5.5、实现搜索框自动补全 6、资料分享链接 ​🍃作者介绍:双非本科大三网络…

linux:watch用法详解

文章目录 1. 描述2. 语法3. 参数4. 例子 1. 描述 watch 用于周期性地执行指定的命令,并将命令的输出打印到终端上。它可以让您以固定的时间间隔观察命令的输出,非常适合用于监视文件系统、系统状态、日志文件等。 2. 语法 watch 命令的基本语法是&…

如何手动清理Linux的内存缓存?清理buff/cache对系统有什么影响?

在Linux系统中,缓存(Cache)是用于提高文件系统性能的一种存储机制。系统会将经常访问的数据保存在缓存中,以便快速访问。手动清理Linux的缓存通常指的是清空页面缓存(page cache)和/或目录项缓存&#xff0…

linux查看网络连接数

目录 netstat top netstat 1.netstat查看当前主机上网络连接信息,端口号,pid,程序名等等 #直接查看 netstat -anp #一般使用的时候,可能要筛选 #比如8080端口是否被占用 netstat -anp | grep 8080 #minio服务占用了那些端口 netstat -anp …

unity数组

数组的定义 动态初始化:在定义数组时只指定数组的长度,由系统自动为元素赋初值的方式。 静态初始化:定义数组的同时就为数组的每个元素赋值 数组的静态初始化有两种方式 1、类型门数组名new 类型[]{元素,元素,…}; 2、类型[数组名{元素&am…

ubuntu20挂载webdav

WebDAV 是个好东西,尤其是配个自己的 NAS 使用,熟悉以后就再也离不开它啦 sudo apt-get update sudo apt-get install davfs2 上下左右键可以切换到“是”选项 2.创建目录挂载点 sudo mkdir /mnt/webdav 3.配置 davfs2 编辑 davfs2.conf 文件以配置 da…