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

简介

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

例如提示的话术就应该用字符串类型,可以拼接你好,我是${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 nul

你可能感兴趣的:(javascript,前端,typescript)