JavaScript数据类型

Mozilla家的介绍
详细介绍

8种类型

最新的 ECMAScript 标准定义了 8 种数据类型: Boolean、Null、Undefined、Number、BigInt、String、Symbol、Object;

7种原始类型

  • null 空
    Null类型只有一个值: null,反正就是什么都没有
  • undefined 空值
    一个没有被赋值的变量会有个默认值 undefined
  • String 字符串基本类型
    字符串类型用于表示文本数据
  • boolean 布尔值
    布尔表示一个逻辑实体,有两个值:true 和 false。
  • Number 数值基本类型
    在JavaScript中被表示为双精度浮点数。这意味着它们的精度有限。基于 IEEE 754 标准的双精度 64 位二进制格式的值(-(253 -1) 到 253 -1)。除了能够表示浮点数外,还有一些带符号的值:+Infinity,-Infinity 和 NaN (非数值,Not-a-Number)
  • Symbol 独一无二的值 :tada:新加
    ECMAScript 2016新增
  • BigInt 大整数基本类型 :tada:新加
    是JavaScript中的一个新的数字基本(primitive)类型,原始数字类型,可以表示任意精度格式的整数
    介绍1 介绍2

null和undefined的区别
简单点解释就是,JS执行时找不到对象时会返回null,声明对象了没有值时返回undefined 介绍

1
2
console.log( null == undefined )//true
console.log( null === undefined )//false

从上面打印结果可以看出从严格模式上它两不一样

1种引用数据类型

  • Object 对象

    Object、Array、Date、Function、RegExp都是object类型

声明数据类型

  • BigInt,将 n 作为后缀添加到任何整数文字字面量。例如,123 变成 123n。全局 BigInt(number) 函数可以用来将 Number 转换成BigInt;
  • Symbol值通过Symbol函数生成
1
2
3
4
5
6
7
8
9
10
var city = null;
var name = new String;
var age = new Number;
var boy = new Boolean;
var agen = BigInt(18);
var ken = Symbol()
var record = new Object;
var hobby = new Array;
var date = new Date();
var fn = new Function();

判断类型

typeof操作符

typeof操作符返回一个表达式的数据类型的字符串,返回结果为js基本的数据类型,即:number、string、undefined、boolean、object、function,语法为typeof(data) 或 typeof data

1
2
3
4
5
6
7
8
9
10
typeof 1; // number  
typeof " ";//string
typeof true//boolean
typeof undefined//undefined
typeof new Function(); // function
typeof null//object
typeof [] ; //object
typeof {}; //object
typeof new Date(); //object
typeof new RegExp(); //object

Object.prototype.toString.call()方法

1
2
3
4
5
6
7
8
9
10
11
12
13
//判断基本类型
Object.prototype.toString.call(null); //"[object Null]"
Object.prototype.toString.call(undefined); //"[object Undefined]"
Object.prototype.toString.call("abc"); //"[object String]"
Object.prototype.toString.call(123); //"[object Number]"
Object.prototype.toString.call(true); //"[object Boolean]"
//判断原生引用类型
Object.prototype.toString.call( function fn(){} ); //"[object Function]"
Object.prototype.toString.call( new Date() );//"[object Date]"
Object.prototype.toString.call([]); //"[object Array]"
Object.prototype.toString.call(/[hbc]at/gi); //"[object RegExp]"
Object.prototype.toString.call({}); //"[object Object]"
Object.prototype.toString.call(JSON) //"[object JSON]"
1
2
3
4
5
6
7
8
// HTML
<p class='demo'></p>
<p class='demo'></p>
<p class='demo'></p>
<p class='demo'></p>

// js
Object.prototype.toString.call( document.querySelectorAll('p') ) //"[object NodeList]"

instanceof

instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上,返回boolean类型,语法为 o instanceof A

1
2
3
4
5
6
7
8
9
10
11
12
({}) instanceof Object // true
([]) instanceof Array // true
(/aa/g) instanceof RegExp // true
(function(){}) instanceof Function // true

//用于检测构造函数:
function C(){}
function D(){}
var o = new C();
o instanceof C; // true
o instanceof D; // false
o instanceof Object; // true

constructor

constructor 介绍是一种用于创建和初始化class创建的对象的特殊方法,创建的每个函数都有一个prototype(原型)对象,所有原型对象都会自动获得一个constructor(构造函数)属性

这个方法我是没用到过,了解下吧

1
2
3
4
5
6
7
8
9
10
function Person (name, age) {
this.name = name
this.age = age
}
var person = new Person('Jim', 21)
console.log(person)
console.log(Object.keys(person))
console.log(person.__proto__)

console.log( person.constructor === Person ); //true

转换类型

转换为字符串

String(obj) 或者 obj.toString(),或者对象加上空字符串也转成了字符串

1
2
3
4
5
6
7
8
9
typeof String(18) //"string"
typeof Number(18).toString(); //"string"
typeof (18 + "") //"string"
typeof String(false) //"string"
String(new Date()) //"Thu May 21 2020 18:45:08 GMT+0800 (中国标准时间)"

({name:"ken"}).toString(); //"[object Object]"
([1,2]).toString(); //"1,2"
new Date().toString() //返回时间的文本,"Thu May 21 2020 18:56:04 GMT+0800 (中国标准时间)"

转换为数字

1
2
3
4
typeof Number("6") //"number"
Number(false) //返回 0
Number(true) //返回 1
Number(new Date()) //返回一个时间戳 1590058303680

转化为布尔值

1
2
3
4
Boolean(1) //true
Boolean(0) //false
Boolean( null) //false
Boolean( undefined ) //false

总结:
instanceof 和 constructor 平时很少用到,typeof是高频使用,Object.prototype.toString.call()次之

参考来源:
参考1
参考2