快捷搜索:  汽车  科技

JavaScript数据类型及检测方法(JavaScript数据类型及检测方法)

JavaScript数据类型及检测方法(JavaScript数据类型及检测方法)<script> let arr = [1 2 3]; let reg = /\w/; console.log(arr instanceof Array); //true console.log(arr instanceof Object); //true console.log(reg instanceof RegExp); //true console.log(reg instanceof Object); //true </script> 局限性:instanceof主要用来弥补typeof不能检测具体属于哪个对象的局限性。<script> console.log(typeof(1)); //number console.log(typeof('hello')); //string console.log(typeof(true)

一、数据类型检测方法

在js中,有四种用于检测数据类型的方式,分别是:

  1. typeof 用来检测数据类型的运算符
  2. instanceof 检测一个实例是否属于某个类
  3. constructor 构造函数
  4. Object.prototype.toString.call() 原型链上的Object对象的toString方法

下面我们就来分别介绍一下上面四种方法的适用场景和局限性。

  • 1.typeof 用来检测数据类型的运算符

使用typeof检测数据类型,返回值是字符串格式。能够返回的数据类型有6种

是:"Number" "string" "bolean" "undefined" "function" "object"。

<script> console.log(typeof(1)); //number console.log(typeof('hello')); //string console.log(typeof(true)); //boolean console.log(typeof(undefined)); //undefined console.log(typeof(null)); //object console.log(typeof({})); //object console.log(typeof(function() {})); //function </script>

局限性:

typeof (null); //"object"。这是由于在js中,null值表示一个空对象指针,而这也正是使用typeof操作 符检测null值时会返回"object"的原因(笔试面试常考)

不能具体的细分是数组还是正则,还是对象中其他的值,因为使用typeof检测数据类型,对于对象数据类型的所有的值,最后返回的都是"object"

  • 2.instanceof 检测某一个实例是否属于某个类

instanceof主要用来弥补typeof不能检测具体属于哪个对象的局限性。

<script> let arr = [1 2 3]; let reg = /\w/; console.log(arr instanceof Array); //true console.log(arr instanceof Object); //true console.log(reg instanceof RegExp); //true console.log(reg instanceof Object); //true </script>

局限性:

不能用于检测和处理字面量方式创建出来的基本数据类型值,即原始数据类型

instanceof的特性:只要在当前实例的原型链上的对象,我们用其检测出来都为true

在类的原型继承中,我们最后检测出来的结果未必正确

  • 3.constructor 构造函数

是函数原型上的属性 该属性指向的是构造函数本身。

此时name age job三种基本数据类型是直接存在栈内存中的,而arr obj在栈内存中只是存了一个地址来表示对堆内存中的引用。

  • d.复制

基本数据类型

对于基本数据类型,如果进行复制,系统会自动为新的变量在栈内存中分配一个新值,很容易理解。

引用数据类型

如果对于数组、对象这样的引用数据类型而言,复制的时候就会有所区别了:

系统也会自动为新的变量在栈内存中分配一个值,但这个值仅仅是一个地址。也就是说,复制出来的变量和原有的变量具有相同的地址值,指向堆内存中的同一个对象。

JavaScript数据类型及检测方法(JavaScript数据类型及检测方法)(1)

当我修改obj或objCopy时,都会引起另一个变量的改变。

参考文章

https://m.jb51.net/article/145078.htm

https://m.jb51.net/article/135920.htm

猜您喜欢: