JS数据类型以及数据类型的判断方法

一、JS中有哪些数据类型?

Undefined、Null、String、Number、Boolean、Object、Symbol共7种

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

其中基本数据类型包括 Undefined、Null、Number、Boolean、String、Symbol (ES6 新增,表示独一无二的值),而引用数据类型统称为 Object 对象,主要包括对象、数组和函数

注意:Symbol是ES6才出现的,它是一种基本数据类型。Symbol()函数会返回symbol类型的值。该类型具有静态属性和静态方法 。每个从Symbol()返回的symbol值都是唯一的。一个symbol值能作为对象属性的标识符。

二、JS中数据类型有哪些判断的方法?

1.typeof

注意:null数组进行typeof操作符后,结果是object,原因在于,null和数组被当做一个空对象引用。

2.instanceof (推荐使用)

instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上,换句话说就是:instanceof用来测试一个实例对象在其原型链中是否存在一个构造函数的prototype属性,存在即为真true,不存在即为false。

原理是instanceof 是通过原型链判断的,A instanceof B, 在A的原型链中层层查找,是否有原型和类(构造函数)的一个属性即B.prototype相等,如果一直找到A的原型链的顶端(null即Object.prototype.__proto__),仍然不等于B.prototype,那么返回false,否则返回true。

语法如下:

object instanceof constructor

其中 object 是某个实例对象,constructor是某个构造函数或者说叫做一个类,结果是true或者false

// 定义构造函数
function C(){}
function D(){}

var a1 = new C();


a1 instanceof C; // true,因为 Object.getPrototypeOf(a1) === C.prototype


a1 instanceof D; // false,因为 D.prototype 不在 a1 的原型链上

a1 instanceof Object; // true,因为 Object.prototype.isPrototypeOf(a1) 返回 true
C.prototype instanceof Object // true,同上

C.prototype = {};
var a2 = new C();

a2 instanceof C; // true

a1 instanceof C; // false,C.prototype 指向了一个空对象,这个空对象不在 a1 的原型链上.

D.prototype = new C(); // 继承
var a3 = new D();
a3 instanceof D; // true
a3 instanceof C; // true 因为 C.prototype 现在在 a3 的原型链上

注意:

(1)对于基本数据类型来说,字面量方式创建出来的结果和实例方式创建的返回结果是不同的:严格来说,只要通过实例创建出来的结果才能算是标准的对象数据类型,而对于字面量产生的值的方式不是严谨的实例,由于js作为一种弱类型语言具有松散特点,导致了Number.prototype上提供的方法只要在当前实例的原型链上,我们用其检测出来的结果都是 true。在类的原型继承中,我们最后检测出来的结果未必准确。这也不难知道,每一种程序语言都有严格的一套语法规范,因为程序不难像人一样一眼能看出来。

这个验证似乎在传达着:微服私访的皇帝老儿我就是不相信你是皇帝,但是你从皇宫带着保镖走出来的皇帝一定是真皇帝

(2) 不能检测 null 和 undefined

(3) 原型链可以重构,导致结果不准确

3.constructor:constructor 属性返回对创建此对象的数组函数的引用。

undefined、null没有contructor属性

语法

object.constructor

4.Object.prototype.toString.call()

三、JS数据类型的使用问题:

1.const 定义的值是否可以改变?

四、参考连接

[1].JS之instanceof详解

[2].JavaScript 数据类型及object类型介绍

[3].JS中的六大数据类型

[4].JavaScript 有几种类型的值?

[5].instanceof

[6].Object.prototype.toString.call(obj)精确判断对象的类型

[7].js检测变量类型--typeof && instanceof

[8].最详尽的 JS 原型与原型链终极详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尔嵘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值