详解Js数据类型种类以及判断数据类型的四种方法

详解Js数据类型相关

  • 数据类型相关
    • 有哪些数据类型?
    • null和undefined的区别是什么?
    • NaN是什么?如何判断一个变量是否为NaN
    • 什么是包装对象?
    • 数据类型实例
  • JavaScript中如何判断一个变量的数据类型?
      • typeOf
      • instanceof
      • toString
      • constructor

数据类型相关

有哪些数据类型?

一共九种
基本数据类型(7种):Number、String、Boolean、null、undefined、Symbol、bigInt。
复杂数据类型(2种):Object、function。
其中Symbol和BigInt是ES6新出现的数据类型。

null和undefined的区别是什么?

null为空指针对象,undefined为未定义的值。
在使用typeof方法判断时。因为历史遗留问题(null机器码为0而Object机器码为000),null被判断为Object,而undefined被判断为undefined。
在用Number方法进行数字转换时,null转换为0,undefined转换为NaN。
在数字运算中,一样如此,null+3=3,undefined+3=NaN

NaN是什么?如何判断一个变量是否为NaN

NaN 是 JavaScript 中的一个特殊值,表示 “Not a Number”,即不是数字。它是一个全局对象的属性,代表一个本来要返回数字的操作数未返回数字的情况。
两种方法判断,一种isNaN,isNaN原理是强制转换成数字,如果无法转换或者转换为NaN,则返回true。
另一种方法是Number.isNaN,这种方法则是不转换直接判断,如果参数值是NaN则返回true,否则返回false.

什么是包装对象?

包装对象是指针对原始值创建的临时对象,在进行操作时会自动转换为对应的原始值。例如,通过包装对象可以访问原始值的属性和方法。
如:Number、String、Boolean都是包装对象。

数据类型实例

let num=1;
let str='1'
let bol=true
let num1=new Number
let str1=new String
let bool1=new Boolean
let arr=[]
let obj={}
let sym=Symbol

在这里呢,我定义了一些数据:有常见的number、Boolean、String、Array、Object,也有不常见的Symbol。在定义数组或者对象时,可以用上述代码中的数组字面量[]和对象字面量来定义{}也可以通过new+构造函数来定义。

JavaScript中如何判断一个变量的数据类型?

typeOf

这个方法能判断出非null类型的基本数据类型,但对于所有null类型和复杂数据类型返回的永远是Object.(Functino除外)。
返回类型都是字符串格式。
例:

console.log(typeof(1));//numberconsole.log(typeof('1'));//stringconsole.log(typeof(null));//Objectconsole.log(typeof(undefined));//undefinedconsole.log(typeof(true));//booleanconsole.log(typeof([1,2,3]));//Objectconsole.log(typeof({}));//Object

在上述代码中,我们能成功判断除了null之外的基本数据类型,而对复杂数据类型typeof的返回值永远是object

instanceof

语法格式:obj instanceof Object
判断左侧对象是否属于右侧特定类型或类的实例。返回true|false,可以检查复杂数据类型,不能检查基本数据类型。
实现原理:
1.获取左侧对象原型
2.获取右侧类型的构造函数的原型,并将它俩进行对比。
3.返回true|false。

toString

Object.prototype上有方法toString.call方法,返回的是[object xxx]格式。可以适用于所有数据类型的判断。

Object.prototype.toString.call(42); // "[object Number]"
Object.prototype.toString.call('Hello'); // "[object String]"
Object.prototype.toString.call(true); // "[object Boolean]"
Object.prototype.toString.call(undefined); // "[object Undefined]"
Object.prototype.toString.call(null); // "[object Null]"
Object.prototype.toString.call({}); // "[object Object]"
Object.prototype.toString.call([]); // "[object Array]"
Object.prototype.toString.call(function() {}); // "[object Function]"

在上述代码中,我们发现toString.call返回值的格式都是**[object 数据类型]**,而它能准确的反应出每种数据的数据类型并按照这种返回值返回。

constructor

constructor 属性在 JavaScript 对象中用于指示对象所属的构造函数,可以进行复杂数据类型判断但不推荐,因为constructor可以被手动修改。同时它不适用与基本数据类型。

let obj={}
if(obj.constructor === Object){console.log(true);//true
}
obj.constructor='string'
console.log(obj.constructor);//string

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

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

相关文章

Java入门基础:浅显易懂 switch

文章目录 前言一、switch二、语法三、示例四、case穿透示例 前言 switch 在开发过程中其实并不常用,95%以上都是用 if 而不是 switch。因为 switch 能做的 if 能做,switch 不能做的 if 也能做,而反过来就不行了。所以对于 switch 能够看懂代码…

matlab不用sawtooth,自己写代码实现锯齿波/三角波

matlab自己写代码实现锯齿波/三角波 为什么要自己写代码,不用现成的函数sawtooth? 函数sawtooth的采样频率是固定的,也就是给定一个时间段,只能按照固定的频率取点。比如10s内,每1s取一个点。这样就得到了1s 2s 3s……

源码学习:smallchat

源码:https://github.com/antirez/smallchat 可用于学习网络通信,源码很小。 考虑先基于第一版进行分析: https://github.com/antirez/smallchat/blob/Episode-1/smallchat.c 先给出readme文件的翻译: Smallchat TLDR: 这只是一…

激活函数与其导数:神经网络中的关键元素

激活函数是神经网络中的重要组成部分,有力地推动了深度学习的发展。然而,仅仅了解和选择激活函数是不够的,我们还需要理解激活函数的导数。本文将详细介绍激活函数的概念、作用及其导数的重要性,并探究导数对神经网络训练的影响。…

【室内定位系统源码】UWB超宽带定位技术的特点和应用前景

uwb人员、物品定位系统源码,智慧工厂人员安全管理定位,高精度定位系统源码 UWB超宽带定位技术概念: 超宽带无线通信技术(UWB)是一种无载波通信技术,UWB不使用载波,而是使用短的能量脉冲序…

Presto+Alluxio数据平台实战

数新网络,让每个人享受数据的价值https://xie.infoq.cn/link?targethttps%3A%2F%2Fwww.datacyber.com%2F 一、Presto & Alluxio简介 Presto Presto是由Facebook开发的开源大数据分布式高性能 SQL查询引擎。 起初,Facebook使用Hive来进行交互式查询…

AI创作工具:Claude2注册保姆级教程

最近软件打算多接入几个AI写作平台,包括讯飞星火,百度文心,Claude2,这样就能给用户提供更多的写作选择 经过半天的调研,讯飞星火,百度文心一言,接入都比较简单,毕竟是国内的。 在调…

关于pytorch以及相关包的安装教程

一.查看自己电脑的配置 首先查看自己电脑的cuda的版本,WinR,敲入cmd打开终端 输入nvidia-smi,查看自己电脑的显卡等配置 这里要说明一下关于这个CUDA,它具有向后兼容性,这意味着支持较低版本的 CUDA 的应用程序通常也可以在较高版本的 CUD…

Jmeter接口自动化测试操作流程

在企业使用jmeter开展实际的接口自动化测试工具,建议按如下操作流程, 可以使整个接口测试过程更规范,更有效。 接口自动化的流程: 1、获取到接口文档:swagger、word、excel ... 2、熟悉接口文档然后设计测试用例&am…

播放器开发(二):了解FFmpeg与SDL常用对象和函数

学习课题:逐步构建开发播放器【QT5 FFmpeg6 SDL2】 前言 这一篇内容就是简单的了解一遍一些常用的函数名称和作用,混个眼熟。 能看源码的就去看源码!!! 能看源码的就去看源码!!! …

C#每天复习一个重要小知识day5:枚举与switch是天生一对

因为枚举一般用来表示条件和类型等等,所以它一般用条件分支来表现。所以枚举与switch是天生一对,因为很方便。(用if语句也可,但是没switch方便) 简单的举例: namespace 精细练习 {enum E_Player {Main,Ot…

前端大厂(腾讯、字节跳动、阿里......)校招面试真题解析,让你面试轻松无压力!

前言 校招很重要,应届生的身份很珍贵!在校招的时候与我们竞争的大部分都是没有工作经验的学生,而且校招企业对学生的包容度高,一般对企业来说,社招更看重实际工作经验,而校招更愿意“培养人”,校…

node fs模板及蓝桥案例实战

文章目录 介绍文件写入writeFile 异步写入writeFileSync 同步写入appendFile / appendFileSync 追加写入createWriteStream 流式写入 文件读取readFile 异步读取readFileSync 同步读取createReadStream 流式读取 文件移动与重命名文件删除文件夹操作mkdir / mkdirSync 创建文件…

python操作redis

操作单redis 需要安装redis模块:pip install redis demo: #!/usr/bin/env python3 # coding utf-8import redis import threadingdef a():conn redis.Redis(host"192.168.1.66", port6379, password"123456", db6,# decode_res…

数据库表结构导出成Excel或Word格式

前言 该工具主要用于导出excel、word,方便快速编写《数据库设计文档》,同时可以快速查看表的结构和相关信息。 本博客仅作记录,最新源码已经支持多种数据库多种格式导出,有兴趣的可移步源码作者地址:https://gitee.co…

模运算Mod

模运算是一种数学运算,通常用于计算机编程和数论中。它表示的是两个整数相除后的余数。在编程中,模运算符(%)用于计算一个数除以另一个数的余数。在数论中,模运算可以用于解决一些与整数除法有关的问题,如最…

RK3568驱动指南|第八篇 设备树插件-第73章 设备树插件使用实验

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…

二十三种设计模式全面解析-深入探讨状态模式的高级应用技术:释放对象行为的无限可能

在软件开发中,状态管理是一个常见的挑战。当对象的行为随着内部状态的变化而变化时,有效地管理对象的状态和相应的行为变得至关重要。在这方面,状态模式提供了一种优雅而灵活的解决方案。它允许对象在运行时根据内部状态的改变而改变其行为&a…

【Redis】前言--redis产生的背景以及过程

一.介绍 为什么会出现Redis这个中间件,从原始的磁盘存储到Redis中间又发生了哪些事,下面进入正题 二.发展史 2.1 磁盘存储 最早的时候都是以磁盘进行数据存储,每个磁盘都有一个磁道。每个磁道有很多扇区,一个扇区接近512Byte。…

MYSQL基础之【创建数据表,删除数据表】

文章目录 前言MySQL 创建数据表通过命令提示符创建表使用PHP脚本创建数据表 MySQL 删除数据表在命令提示窗口中删除数据表使用PHP脚本删除数据表 后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:Mysql 🐱‍👓博主…