美文网首页
如何判断变量类型

如何判断变量类型

作者: 雪人苏苏_ | 来源:发表于2018-05-10 22:46 被阅读0次

在JS中如何判断变量的类型属于基础知识,很多时候我们会忽略。毕竟上手代码的时候可以现查。无论如何演变,我想基本功还是很重要的,熟练掌握总是百利而无一害。

1、首先第一种就是我们常用的typeof(),它会将类型信息当作字符串返回。如下:

console.log(typeof undefined); //undefined
console.log(typeof 5); //number
console.log(typeof true); //boolean
console.log(typeof 'hello world!'); //string

很完美对不对?但我们知道,这个世界几乎没有什么是完美的。看看下面的栗子就知道了:

console.log(typeof ['h', 'e', 'l', 'l', 'o']); //object
console.log(typeof { name: 'susu', age: 3 }); //object
console.log(typeof null); //object
console.log(typeof new Date()); //object

打印出来的结果都是object类型。通过上面的打印结果,我们知道typeof在判断变量类型的时候比较适合用来处理基本数据类型,如果是引用类型的值,typeof恐怕就心有余而力不足了。

2、instanceof:该运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性。

let arr = [1, 2, 3];
let obj = { name: 'susu', age: 3 };
console.log(obj instanceof Array); //false
console.log(obj instanceof Object); //true

通过instanceof很容易就能判断一个变量是数组还是对象,貌似比typeof要高级了一些。但如果遇到数组,情况可能跟我们想象的不一样了。

let arr = [1, 2, 3];
console.log(arr instanceof Array); //true
console.log(arr instanceof Object); //true

为什么都是true呢?看看上面instanceof运算符的定义,是用来测试一个对象在原型链上是否存在一个构造函数的prototype属性。只要熟悉原型链就会知道,每个对象都有一个proto属性,指向创建该对象的函数的prototype。instanceof的判断规则是通过proto和prototype能否找到同一个引用对象。通过打印下面的等式,我们就能知道为什么上面的栗子都会打印出true。

console.log(arr.__proto__.__proto__ === Object.prototype); //true
console.log(arr.__proto__ === Array.prototype); //true

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

let arr = [1, 2, 3];
let obj = { name: 'susu', age: 3 };
console.log(arr.constructor === Array); //true
console.log(arr.constructor === Object); //false
console.log(obj.constructor === Array); //false
console.log(obj.constructor === Object); //true

4、Object.prototype.toString.call():在js中该方法可以精准的判断对象类型,也是推荐使用的方法。

可以判断基本数据类型:

console.log(Object.prototype.toString.call(3)); //[object Number]
console.log(Object.prototype.toString.call(true)); //[object Boolean]
console.log(Object.prototype.toString.call(null)); //[object Null]
console.log(Object.prototype.toString.call('hello')); //[object String]
console.log(Object.prototype.toString.call(undefined)); //[object Undefined]

也可以判断引用数据类型:

let arr = [1, 2, 3];
let obj = {name: 'susu', age: 3};
let date = new Date();
function fn(){console.log('hello world!')}; 
       
console.log(Object.prototype.toString.call(arr)); //[object Array]    
console.log(Object.prototype.toString.call(obj)); //[object Object]      
console.log(Object.prototype.toString.call(date)); //[object Date]      
console.log(Object.prototype.toString.call(fn)); //[object Function]

以上。

相关文章

  • 如何判断变量类型

    在JS中如何判断变量的类型属于基础知识,很多时候我们会忽略。毕竟上手代码的时候可以现查。无论如何演变,我想基本功还...

  • JS中typeof的用法

    js是一门弱语言,它在声明变量时无需确定变量的类型,js在运行时会自动判断。那么如何判断一个变量的类型呢,...

  • 掘金js

    js的基本类型有哪些?引用类型有哪些?null和undefined的区别。 如何判断一个变量是Array类型?如何...

  • 判断变量类型

    在 JS 中,有 5 种基本数据类型和 1 种复杂数据类型基本数据类型:Undefined, Null, Bool...

  • 判断变量类型

    JS 中的变量 基本类型变量 number string boolean null undefined symbo...

  • 判断类型

    判断类型 获取变量的类型对象 获取类型 is 方法

  • php中判断数据类型及类型转换

    getType() 判断一个数据的数据类型 判断变量是不是某个类型 变量间的转换

  • 20170811

    ##### 循环对象自身的属性 instanceof 用于判断引用类型属于哪个构造函数的方法 如何准确判断一个变量...

  • 自制前端框架Day18 写一个判断两个变量是否相等的工具函数

    如何判断两个变量是相等的? 通过简单的===只能判断基本类型,比如string和number,如果要判断数组或者对...

  • JavaScript 判断变量类型的3种方法,类型检查

    我们先准备一组不同变量的列表用于测试 01.使用typeof判断变量类型 typeof可以判断变量类型,但是这个方...

网友评论

      本文标题:如何判断变量类型

      本文链接:https://www.haomeiwen.com/subject/fnfxdftx.html