关闭

Javascript的类型检测

时间: 2019-01-24阅读: 843标签: 类型

主要介绍了js中检测数据类型的几种方式。


1、typeof  

主要用于判断基本数据类型 。使用方式:typeof(表达式)和typeof 变量名,第一种是对表达式做运算,第二种是对变量做运算。

 typeof运算符的返回类型为字符串,值包括如下几种:

1. 'undefined'              --未定义的变量或值
2. 'boolean'                 --布尔类型的变量或值
3. 'string'                     --字符串类型的变量或值
4. 'number'                  --数字类型的变量或值
5. 'object'                    --对象类型的变量或值,或者null(这个是js历史遗留问题,将null作为object类型处理)
6. 'function'                 --函数类型的变量或值
示例如下:
console.log(typeof a);    //'undefined'    
console.log(typeof(true));  //'boolean'    
console.log(typeof '123');  //'string'    
console.log(typeof 123);   //'number'    
console.log(typeof NaN);   //'number'    
console.log(typeof null);  //'object'       
var obj = new String();    console.log(typeof(obj));    //'object'    
var  fn = function(){};    console.log(typeof(fn));  //'function'    
console.log(typeof(class c{}));  //'function'

typeof的不足之处:

  1. 不能区分对象、数组、正则,对它们操作都返回"object";(正则特殊一点后面说)
  2. Safar5,Chrome7之前的版本对正则对象返回 'function'
  3. 在IE6,7和8中,大多数的宿主对象是对象,而不是函数;如:typeof alert; //object
  4. 而在非ID浏览器或则IE9以上(包含IE9),typeof alert; //function
  5. 对于null,返回的是object.

总结:  

typeof运算符用于判断对象的类型,但是对于一些创建的对象,它们都会返回'object',有时我们需要判断该实例是否为某个对象的实例,那么这个时候需要用到instanceof运算符。


2、instanceof  

用于引用数据类型的判断。所有引用数据类型的值都是Object的实例。目的是判断一个对象在其原型链上是否存在构造函数的prototype属性。 用法:

variable instanceof constructor

示例如下:  

// example
var arr = [];
 
由于:
1. arr.constructor === Array
2. arr.__proto__ === Array.prototype
3. arr.__poto__.proto__ === Object.prototype
 
所以, 以下都返回true
1. arr instanceof arr.constructor(Array)
2. arr instanceof arr.__proto__.constructor(Array)
3. arr instanceof arr.__proto__.__poto__.constructor(Object)
 
 
如果你了解原型链的话,你很快就会得出一些结论:
1. 所有对象 instanceof Object 都会返回 true
2. 所有函数 instanceof Function 都会返回 true

总结:  

instanceof不仅能检测构造对象的构造器,还检测原型链。instanceof要求前面是个对象,后面是一个构造函数。而且返回的是布尔型的,不是true就是false。


3、Array.isArray()

Array.isArray()可以用于判断数组类型,支持的浏览器有IE9+、FireFox 4+、Safari 5+、Chrome;  兼容实现:

if (!Array.isArray) {
  Array.isArray = function(arg) {
    return Object.prototype.toString.call(arg) === '[object Array]';
  };
}

示例如下:    

// 1.
Array.isArray([1, 2, 3, 4]);  // --> true

// 2.
var obj = {
    a: 1,
    b: 2
};
Array.isArray(obj);  // --> false

// 3.
Array.isArray(new Array);  // --> true

//4.
Array.isArray("Array");  // --> false

总结:  

isArray是一个静态方法,使用Array对象(类)调用,而不是数组对象实例。其中Array.prototype 也是一个数组,Array.isArray 优于 instanceof。


4、Object.prototype.toString.call() 

判断某个对象值属于哪种内置类型, 最靠谱的做法就是通过Object.prototype.toString方法。object.prototype.toString()输出的格式就是[object 对象数据类型]。 

示例如下:   

console.log(Object.prototype.toString.call("jerry"));//[object String]
console.log(Object.prototype.toString.call(12));//[object Number]
console.log(Object.prototype.toString.call(true));//[object Boolean]
console.log(Object.prototype.toString.call(undefined));//[object Undefined]
console.log(Object.prototype.toString.call(null));//[object Null]
console.log(Object.prototype.toString.call({name: "jerry"}));//[object Object]
console.log(Object.prototype.toString.call(function(){}));//[object Function]
console.log(Object.prototype.toString.call([]));//[object Array]
console.log(Object.prototype.toString.call(new Date));//[object Date]
console.log(Object.prototype.toString.call(/\d/));//[object RegExp]
function Person(){};
console.log(Object.prototype.toString.call(new Person));//[object Object]


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/1885

关闭

js 的隐式转换与显式转换

隐式转换:undefined与null相等,但不恒等(===),一个是number一个是string时,会尝试将string转换为number;显示转换一般指使用Number、String和Boolean三个构造函数,手动将各种类型的值

Js判断null、undefined与NaN的方法

typeof 返回的是字符串,有六种可能:number、string、boolean、object、function、undefined,如果把 NaN 与任何值(包括其自身)相比得到的结果均是 false,所以要判断某个值是否是 NaN,不能使用 == 或 === 运算符

JavaScript隐式类型转换

JavaScript的数据类型是非常弱的(不然不会叫它做弱类型语言了)!在使用算术运算符时,运算符两边的数据类型可以是任意的,比如,一个字符串可以和数字相加

Js的typeof返回哪些数据类型?

JavaScript中的数据类型:值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol。引用数据类型:对象(Object)、数组(Array)、函数(Function)。

不同类型值相比较的规则和类型转换、隐式转换

相等运算符(==) 在遇到两个操作数类型不同的时候,要遵守的规则和类型转换 ;如果-个值是null, 另一个是undefined,则它们相等

JS中Null与Undefined的区别

在JavaScript中存在这样两种原始类型:Null与Undefined。这两种类型常常会使JavaScript的开发人员产生疑惑,在什么时候是Null,什么时候又是Undefined?Undefined类型只有一个值,即undefined。当声明的变量还未被初始化时,变量的默认值为undefined。

TypeScript 2.0 标记联合类型

TypeScript 2.0 实现了一个相当有用的功能:标记联合类型,您可能将其称为 sum 类型或与其他编程语言区别开的联合类型。 标记联合类型是其成员类型都定义了字面量类型的区分属性的联合类型。

如何实现一个parseInt

如果string不为字符串类型, 则先将string转化为字符串类型,string会忽略前后的空白,依次解析字符, 如果字符不是指定基数中的字符

JavaScript 数据类型与类型判断详解

原始数据类型直接存储在栈(stack)中的简单数据段,占据空间小、大小固定,属于被频繁使用数据,所以放入栈中存储。typeof这应该初学者首次接触的类型判断方法了,它返回一个表示数据类型的字符串,返回结果包括:

Js如何将String转化为Int

字符串到整型的一个转换,在面试过程中或者在工作中都会频繁遇到,那么string到js怎么转换呢 ?parseInt方法在format\'00\'开头的数字时会当作2进制转10进制的方法进行转换

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!