JavaScript数据类型的分类、判断和转换

本文介绍了JavaScript的数据类型,包括简单数据类型、引用类型、包装类型、null和undefined的区别。详细讲解了数据类型判断的方法,如typeof、instanceof和Object.prototype.toString,并探讨了类型转换的规则和场景,包括隐式转换的机制。
摘要由CSDN通过智能技术生成

简介

编程语言会有不同的数据类型,这是因为数据是对不同场景的实体的量化抽象,不同实体之间会有区别,另外,不同类型的数据的应用场景和操作也是不一样的。

例如提示的话术就应该用字符串类型,可以拼接你好,我是${name}。而例如游戏得分应该用数值类型,可以进行加减等运算。

数据类型

JavaScript类型介绍

数据类型分类

ECMSScript有5种简单数据类型(也称为基本数据类型):Undefined、Null、Boolean、Number、String。还有一种复杂的数据类型——Object。
—— 《JavaScript高级程序设计》

根据《JavaScript高级程序设计》中说明,JavaScript有6种数据类型,Undefined、Null、Boolean、Number、String、Object。但实际上typeof null的值是"object",另外typeof function() {}的值是"function"。因此我们认为null并不是一个独立的类型,null是object类型是一个值,而function也是一个独立的类型。

**js数据类型有6种:

  • number
  • string
  • boolean
  • object
  • function
  • undefined

undefined类型的值只有一个,就是undefined。

数值类型有两个特殊的值,NaN(not a number)和Infinity(无穷大)

object类型又可以分为

  • plain object // 普通对象
  • Date // 日期
  • Array // 数组
  • RegExp // 正则

其中number、string、boolean、undefined是值类型,function和object是引用类型。

值类型和引用类型

值类型和引用类型的区别是,值类型赋的变量直接存储数据,引用类型的变量存储数据的引用。

let a = 1;
let b = a;
b = 2;

console.log(a, b); // 1, 2

let c = {attr: 'yes'};
let d = c;
d.attr = 'no';

console.log(c.attr, d.attr); // no no
function test(arg) {
  arg = 2;
}

let a = 1;
// 相当于将a的值赋给test中的参数变量,参数改变并不会影响到a
test(a);

console.log(a); // 1

function update(arg) {
  arg.attr = 2;
}
let b = {attr: 1};
// 将b的引用赋给update的参数变量,参数变量改变引用指向的数据,也会影响到b
update(b);

console.log(b.attr); // 2

包装类型

基础类型的数据在使用时候,js引擎会先将之包装为对象,语句执行完对象被销毁。这个过程也被称为“装箱拆箱”。例如

const arr = '1,2,3'.split(',');

字符串先包装为String对象,然后对象执行相应方法,语句执行完后,包装对象就被销毁。

再如(1).toString()将返回数据类型的包装对象转换成的字符串。

注意:1.toString()会将"."解析为小数点,因此会报语法错误

包装类型机制扩展了基本数据类型的能力,方便了日常开发。

因为基础类型也有包装类型转为对象,因此除了Symbol都有构造函数。

"1".constructor                 // 返回函数 String()  { [native code] }
(1).constructor                 // 返回函数 Number()  { [native code] }
false.constructor                  // 返回函数 Boolean() { [native code] }
[1,2,3].constructor              // 返回函数 Array()   { [native code] }
{}.constructor  // 返回函数 Object()  { [native code] }
new Date().constructor             // 返回函数 Date()    { [native code] }
function () {}.constructor         // 返回函数 Function(){ [native code] }

null和undefined的区别

本身都表示“没有”,但null表示引用类型的对象为空,undefined则表示变量未定义。

在相等判断时候,null和undefined是相等的。

但null和undefined在很多方面有区别。

含义不同

null表示对象空指针,undefined表示变量未定义。

类型不同

typeof null // &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值