JavaScript typeof

在 JavaScript 中有 5 种不同的可以包含值的数据类型:

  • string
  • number
  • boolean
  • object
  • function

有 6 种类型的对象:

  • Object
  • Date
  • Array
  • String
  • Number
  • Boolean

以及 2 种不能包含值的数据类型:

  • null
  • undefined

typeof 运算符

您可以使用 typeof 运算符来确定 JavaScript 变量的数据类型。

实例

<!DOCTYPE html>
<html lang="en"><body><p id="demo"></p><script>document.getElementById("demo").innerHTML ="'Bill' 是 " + typeof "Bill" + "<br>" +"3.14 是 " + typeof 3.14 + "<br>" +"NaN 是 " + typeof NaN + "<br>" +"false 是 " + typeof false + "<br>" +"[1, 2, 3, 4] 是 " + typeof [1, 2, 3, 4] + "<br>" +"{name:'Bill', age:19} 是 " + typeof { name: 'Bill', age: 19 } + "<br>" +"new Date() 是 " + typeof new Date() + "<br>" +"function () {} 是 " + typeof function () { } + "<br>" +"myCar 是 " + typeof myCar + "<br>" +"null 是 " + typeof null;</script>
</body></html>
<!-- 
typeof "Bill"                 // 返回 "string"
typeof 3.14                   // 返回 "number"
typeof NaN                    // 返回 "number"
typeof false                  // 返回 "boolean"
typeof [1,2,3,4]              // 返回 "object"
typeof {name:'Bill', age:19}  // 返回 "object"
typeof new Date()             // 返回 "object"
typeof function () {}         // 返回 "function"
typeof myCar                  // 返回 "undefined" *
typeof null                   // 返回 "object"-->

请注意:

  • NaN 的数据类型是数字
  • 数组的数据类型是对象
  • 日期的数据类型是对象
  • null 的数据类型是 object
  • 未定义变量的数据类型为 undefined *
  • 未赋值的变量的数据类型也是 undefined *

您无法使用 typeof 来确定 JavaScript 对象是否是数组(或日期)。

原始日期

原始数据值指的是没有附加属性和方法的单个简单数据值。

typeof 运算符可以返回以下原始类型之一:

  • string
  • number
  • boolean
  • undefined

实例

typeof "Bill"              // 返回 "string"
typeof 3.14                // 返回 "number"
typeof true                // 返回 "boolean"
typeof false               // 返回 "boolean"
typeof x                   // 返回 "undefined" (if x has no value)

复杂数据

typeof 运算符可以返回两种复杂类型之一:

  • function
  • object

typeof 运算符会为对象、数组和 null 返回 "object"。

typeof 运算符不会为函数返回 "object"。

实例

typeof {name:'Bill', age:19} // 返回 "object"
typeof [1,2,3,4]             // 返回 "object"(非 "array",请注意下面的例子)
typeof null                  // 返回 "object"
typeof function myFunc(){}   // 返回 "function"

typeof 运算符会为数组返回 "object",因为在 JavaScript 中数组是对象。

typeof 的数据类型

typeof 运算符并不是变量。它只是一个运算符。运算符 (+ - * /) 没有任何数据类型。

但是,typeof 运算符总是返回字符串(包含操作数的类型)。

constructor 属性

constructor 属性返回所有 JavaScript 变量的构造函数。

实例

"Bill".constructor                // 返回 function String()  {[native code]}
(3.14).constructor                // 返回 function Number()  {[native code]}
false.constructor                 // 返回 function Boolean() {[native code]}
[1,2,3,4].constructor             // 返回 function Array()   {[native code]}
{name:'Bill',age:19}.constructor  // 返回 function Object()  {[native code]}
new Date().constructor            // 返回 function Date()    {[native code]}
function () {}.constructor        // 返回 function Function(){[native code]}

可以检查 constructor 属性以确定对象是否为数组(包含 "Array" 一词):

实例

<!DOCTYPE html>
<html lang="en"><body><p id="demo"></p><script>const fruits = ["Banana", "Orange", "Apple"];document.getElementById("demo").innerHTML = isArray(fruits);function isArray(myArray) {return myArray.constructor.toString().indexOf("Array") > -1;}</script>
</body></html>
//true

更简单,您可以检查对象是否为数组函数

<!DOCTYPE html>
<html><body><p id="demo"></p><script>const fruits = ["Banana", "Orange", "Apple", "Mango"];document.getElementById("demo").innerHTML = isArray(fruits);function isArray(myArray) {return myArray.constructor === Array;}</script></body></html>
//true

可以检查 constructor 属性以确定对象是否为日期(包含 "Date" 一词):

<!DOCTYPE html>
<html><body><p id="demo"></p><script>const myDate = new Date();document.getElementById("demo").innerHTML = isDate(myDate);function isDate(myDate) {return myDate.constructor.toString().indexOf("Date") > -1;}</script></body></html>
//true

更简单,您可以检查对象是否为日期函数

<!DOCTYPE html>
<html><body><p id="demo"></p><script>const myDate = new Date();document.getElementById("demo").innerHTML = isDate(myDate);function isDate(myDate) {return myDate.constructor === Date;}</script></body></html>
//true

Undefined

在 JavaScript 中,没有值的变量的值是 undefined。类型也是 undefined

实例

let car; // 值是 undefined,类型也是 undefined。

通过将其值设置为 undefined,可以清空任何变量。类型也将是 undefined

实例

car = undefined; // 值是 undefined,类型也是 undefined。

空值

空值与 undefined 无关。

空字符串既有合法值又有类型。

实例

let car = ""; // 值是 "",类型是 "string"

Null

在 JavaScript 中 null 即是“无”。它应该是不存在的东西。

不幸的是,在 JavaScript 中,null 的数据类型是一个对象。

你可以认为它是 JavaScript 中的一个 bug,typeof null 是一个对象。类型应为 null

您可以通过将对象设置为 null 来清空对象:

实例

let person = {firstName:"Bill", lastName:"Gates", age:19, eyeColor:"blue"};
person = null;    // 现在值为 null,但类型仍然是对象

您还可以通过将对象设置为 undefined 来清空对象:

实例

let person = {firstName:"Bill", lastName:"Gates", age:19, eyeColor:"blue"};
person = undefined;   // 现在值和类型都是未定义

undefined 与 null 的区别

undefinednull 值相等但类型不同:

typeof undefined           // undefined
typeof null                // objectnull === undefined         // false
null == undefined          // true

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

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

相关文章

C语言-使用数组法,指针法实现将一个5X5的矩阵中最大的元素放在中心,四个角分别放四个最小的元素(顺序为从左到右,从上到下,从小到大存放),写一函数实现之。

1.题目要求&#xff1a; 将一个5X5的矩阵中最大的元素放在中心&#xff0c;四个角分别放四个最小的元素&#xff08;顺序为从左到右&#xff0c;从上到下&#xff0c;从小到大存放&#xff09;&#xff0c;写一函数实现之。 2.数组法实现 #define _CRT_SECURE_NO_WARNINGS 1…

python从入门到精通:数据容器

数据容器介绍 一种可以容纳多份数据的数据类型&#xff0c;容纳的每一份数据称之为一个元素&#xff0c;可以是任意类型的数据&#xff0c;如字符串、数字、布尔等。 数据容器根据特点的不同&#xff0c;如&#xff1a; 是否支持重复元素 是否可以修改 是否有序&#xff0…

数据库根据日期统计SQL编写记录

统计每天产生多少数据 SELECT to_char("日期字段",YYYY-MM-dd) time ,count(*) FROM "表名" GROUP BY time;统计每月产生多少数据 SELECT to_char("日期字段",YYYY-MM) time ,count(*) FROM "表名" GROUP BY time;统计每年产生多少数…

Windows下添加开机启动项

三种方式 使用任务管理器&#xff1a;右键点击任务栏&#xff0c;选择“任务管理器”。切换到“启动”选项卡。点击右下角的“打开任务管理器”。在这里&#xff0c;你可以看到已启用和禁用的启动项。右键点击你希望添加的程序&#xff0c;选择“启用” 按Win R&#xff0c;输…

【GitLab】使用 Docker 安装 GitLab 1:配置 SSH 端口

使用 Docker 安装 GitLab 要求修改ssh端口 GitLab 使用 SSH 通过 SSH 与 Git 交互。默认情况下,GitLab 使用端口22。 要在使用 GitLab Docker 映像时使用其他端口,您可以执行以下操作之一: 更改服务器的 SSH 端口(推荐)。 更改 GitLab Shell SSH 端口。 更改服务器的 SSH …

C++(week17): C++提高:(七)workflow

文章目录 一、Http协议二、Nginx1.概念2.nginx的安装和部署(1)安装nginx(2)使用nginx服务器部署静态资源 3.HTTP服务器架构(1)基于进程、基于线程&#xff1a;APache(2)事件驱动模型&#xff1a;Nginx(3)反向代理(4)负载均衡 三、workflow异步事件引擎 (异步回调模型)1.服务器底…

【SVN(Subversion)是一个版本控制系统】

Question SVN所有命令 Answer SVN&#xff08;Subversion&#xff09;是一个版本控制系统&#xff0c;用于管理和跟踪文件和目录的更改。以下是一些常用的SVN命令&#xff1a; 检出&#xff08;Checkout&#xff09; svn checkout URL从版本库中检出一个工作副本。 更新&am…

Qt找不到QSound头文件,头文件QSoundEffect

目录 Qt找不到QSound头文件 CMake qmke 可能版本不同更新&#xff0c; 找不到QSound头文件 Qt找不到QSound头文件 #include <QSound> CMake 可以看一下这篇来自网上的文章 CMake中添加Qt模块的合理方法 - wjbooks - 博客园 (cnblogs.com) qmke 打开.pro文件&am…

[linux#39][线程] 详解线程的概念

线程&#xff1a;是进程内的一个执行分支。线程的执行粒度比进程要细 什么是线程&#xff1f; • 在一个程序里的一个执行路线就叫做线程&#xff08;thread&#xff09;。更准确的定义是&#xff1a;线程 是“一个进程内部的控制序列” • 一切进程至少都有一个执行线程 • …

前端宝典之六:React源码解析之lane模型

本文主要内容&#xff1a; 介绍lane模型 一、 lane模型 lane模型就是react优先级的机制&#xff0c;可以用来 可以表示优先级的不同可能同时存在几个同优先级的更新&#xff0c;所以还得能表示批的概念方便进行优先级相关计算 1、表示优先级不同 lane模型使用31位的二进制…

BF算法,KMP算法

前言&#xff1a;今天我们来学习两种算法&#xff0c;BF算法和KMP算法。相信会让许多小伙伴们打开新世界的大门。 1 BF算法 实践是检验真理的唯一标准。举一个例子说明BF算法。现在我们要在一个主串中找子串的位置。那我们该如何解决这个问题呢&#xff1f;最简单的办法自然是…

Repeat方法:取模运算教材与Unity控制台输出数值不同的原因

学习该知识点的参考教材&#xff1a;Unity API解析/陈宏泉编著.——北京&#xff1a;人民邮电出版社&#xff0c;2014.9 编辑脚本的环境&#xff1a;Visual Studio 2022 在学习该本教材的第五章Mathf类的内容&#xff0c;通过跟随教材上的代码了解不同UnityAPI的具体用法时&a…

【机器学习】线性回归与逻辑回归的极致解析:从数学理论到实战案例

文章目录 1. 引言Python 代码示例 2. 线性回归2.1 线性回归的基本概念线性回归的定义数学表达式及模型假设 2.2 线性回归的工作原理最小二乘法&#xff08;Ordinary Least Squares, OLS&#xff09;梯度下降法在线性回归中的应用多元线性回归与一元线性回归的区别与联系 2.3 线…

什么是AR、VR、MR、XR?

时代背景 近年来随着计算机图形学、显示技术等的发展&#xff0c;视觉虚拟化技术得到了广泛的发展&#xff0c;并且越来越普及化&#xff0c;慢慢的也走入人们的视野。目前市场上视觉虚拟化技术的主流分为这几种 VR、AR、MR、XR。这几项技术并不是最近才出现的&#xff0c;VR的…

linux开通端口命令

这块需要开通8088 8083 端口限制 查看已开放端口&#xff1a;sudo firewall-cmd --list-ports 开放8083端口&#xff1a;sudo firewall-cmd --add-port8088/tcp --permanent 开放8088端口&#xff1a;sudo firewall-cmd --add-port8083/tcp --permanent 移除端…

机器学习笔记 第十二章计算学习理论

12.1 基础知识 计算学习理论就是关于机器学习的理论基础&#xff0c;其作用就是分析学习任务的困难实质&#xff0c;通过分析结果来知道算法设计&#xff0c;并为学习算法提供理论保证。 给定样例集&#xff0c;&#xff0c;假设为二分类问题&#xff0c;一般。假定中的所有样…

实现将docx转成PDF

最近实现了一个将docx转成PDF的功能&#xff0c;这里来记录一下实现过程 我是参考这篇文章Java将Word转换成PDF的常用用法_java_脚本之家 实现步骤基本上是按照上面文档中描述的内容&#xff0c;把大象装冰箱一共就三步 1、导入依赖 <?xml version"1.0" enco…

GoMail发送邮件的性能优化策略有哪些方法?

GoMail发送邮件如何配置服务器&#xff1f;GoMail发信功能如何&#xff1f; GoMail是一款广受欢迎的Go语言邮件发送库&#xff0c;具备高效、易用等优点&#xff0c;但在高并发场景下&#xff0c;GoMail发送邮件的性能优化显得尤为重要。AokSend将探讨几种有效的GoMail发送邮件…

MySQL中处理JSON数据:大数据分析的新方向

1. 简介 1.1. 概述 在MySQL中处理JSON数据的能力是在MySQL 5.7版本中引入的,并在后续的版本中不断得到增强。这使得MySQL能够直接操作和查询JSON格式的数据,极大地扩展了其处理复杂数据结构的能力。 1.2. 主要特点 灵活性与可扩展性 :JSON允许开发者存储不规则和嵌套的数…

每日一问:深入探讨TCP与UDP的区别

每日一问&#xff1a;TCP与UDP区别的深入探讨 在网络通信中&#xff0c;TCP&#xff08;传输控制协议&#xff09;和UDP&#xff08;用户数据报协议&#xff09;是最常用的传输层协议。本文将详细探讨这两者的基本概念、功能差异及其在实际应用中的使用场景。通过实例和代码演示…