JavaScript数据类型检测

一、JavaScript 数据类型

  1、基本数据类型(6种)

      • Undefined
      • Null
      • Boolean
      • Number
      • String
      • Symbol  (ES6新增)

  2、引用数据类型: Object

二、数据类型检测

  1、 typeof  可以检测除null 外的基本类型。null 和所有对象的typeof都是“object”, 不能用于检测用户自定义类型。 比如Date, RegExp, Array, DOM Element的类型都是"object"。  

var s = ‘hi‘;var b = true;var num = 22;var u;var n = null;var o = {};var a = [];var sym = Symbol();

typeof s;    //string typeof b;    //booleantypeof num;   //numbertypeof u;    //undefinedtypeof n;    //objecttypeof o;    //objecttypeof a;    //objecttypeof sym;   //symbol

  2、instanceof  可用来检测引用类型值。因为所有引用类型的值都是Object的示例,所以, (引用类型值) instanceof Object 始终返回true。 如果使用instanceof检测基本类型值,则始终返回false。

a instanceof Array;    //true
a instanceof Object;    //true

var fun = function(){};
fun instanceof Function    //true
fun instanceof Object       //true

num instanceof Number     //false
new Number(22) instanceof Number    //true
b instanceof Boolean   //falsenew Boolean(true) instanceof Boolean  //true

n instanceof XXX    //falseu instanceof XXX    //false

  3、Object.prototype.toString.call() 最准确最常用的方式

Object.prototype.toString.call(a);     // [object Array]
Object.prototype.toString.call(o);     // [object Object]
Object.prototype.toString.call(s);     // [object String]Object.prototype.toString.call(sym);     // [object Symbol]Object.prototype.toString.call(new Date());     // [object Date]Object.prototype.toString.call(num);      // [object Number]Object.prototype.toString.call(function () {});     // [object Function]Object.prototype.toString.call(/abc/i);    // [object RegExp]Object.prototype.toString.call(b);       // [object Boolean]Object.prototype.toString.call(n);       // [object Null]Object.prototype.toString.call(u);       // [object Undefined]

  4、jquery.type()

  5、检测数组  Array.isArray(a)  //true

  6、多全局执行环境问题。使用instanceof 等方法的问题是,假定为单一的全局执行环境。如果网页中包含多个框架,那么就存在多个不同的全局执行环境,从而存在多个不同版本的Object、Array等构造函数,如果从一个框架传入另一个框架,则传入的值与第二个框架中原生创建的值分别具有不通过的构造函数,会出现问题。如:(http://harttle.com/2015/09/18/js-type-checking.html)

var iframe = document.createElement(‘iframe‘);
var iWindow = iframe.contentWindow;
document.body.appendChild(iframe);

iWindow.Array === Array         // false
// 相当于
iWindow.Array === window.Array  // false
//因此iWindow中的数组arr原型链上是没有window.Array的。请看:

iWindow.document.write(‘<script> var arr = [1, 2]</script>‘);
iWindow.arr instanceof Array            // false
iWindow.arr instanceof iWindow.Array    // true

参考:

Javascript高级程序设计

http://es6.ruanyifeng.com/#docs/symbol

https://shenbao.github.io/2016/11/02/Javascript-Test-data-type/

http://harttle.com/2015/09/18/js-type-checking.html

时间: 2024-10-27 02:50:48

JavaScript数据类型检测的相关文章

JS基础(JavaScript三大特点、基本数据类型检测、逻辑运算符的短路运算、几大循环结构的特点)

JavaScript的三大特点 1.js是单线程语言,浏览器只分配给js一个主线程,用来执行任务(函数) 2.JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型. 3.数据类型可以被忽略的语言.一个变量可以赋不同数据类型的值. JavaScript基本数据类型检测 关键字  typeof(变量名或者数据) 用来检测数据类型 typeof对于的值只有六个,分别是: string.number.boolean.object.undefined.functio

javascript toString数据类型检测

一.typeof 是一个一元运算符.检测数据类型,返回一个字符串,包含数据类型信息.例如:“number,string,undefined” 局限性: 1.typeof null ===> “object” 2.typeof []  ===>  "object" 不能具体检测对象数据类型的细分项(数组.正则...) 二.instanceof 检测某一个实例是否属于这个类 var ary = [1,2,3,4]; ary instanceof Array   //如果true

捋一捋Javascript数据类型转换规则

一.数据类型 5种基本数据类型:Null/Undefined/String/Boolean/Number 1种复杂数据类型:Object 二.数据类型检测 传送门<四种JS数据类型方式及其局限性> 1.typeof 2.instanceof/constructor 3.Object.prototype.toString.call(value) 4.Object.prototype.toString 三.数据类型转换 JS内部提供不同数据类型的自动转换机制,在某处预期为某种类型而不是某种类型时,

JavaScript筑基篇(二)-&gt;JavaScript数据类型

说明 介绍JavaScript数据类型 目录 前言 参考来源 前置技术要求 JavaScript的6种数据类型 哪6种数据类型 undefined 类型 null 类型 boolean 类型 number 类型 string 类型 复杂 类型 基本型和引用型的不同 关于数据类型的一些常见疑问 为什么typeof null === 'object' string,String,object,Object,function,Function的关系 关于String类型与string类型的疑问 fun

JavaScript数据检测

前言:随着编程实践的增加,慢慢发现关于数据类型的检测至关重要.我认为程序就是为了处理数据和展示数据.所以,数据的检测对于编程来说也至关重要.因为只有符合我们预期的输入,才可能产生正确的输出.众所周知,JavaScript是弱类型语言,这带来很多便利的同时,也带来了不少问题.为了减少编程实践中在变量判断方面出现的问题,我们需要对不确定的变量进行检测,以保证处理符合预期的数据.本文是对数据检测的总结. 1.检测原始值 ECMAScript 有 5 种原始类型(primitive type),即 Un

第九十九节,JavaScript数据类型

JavaScript数据类型 学习要点: 1.typeof操作符 2.Undefined类型 3.Null类型 4.Boolean类型 5.Number类型 6.String类型 7.Object类型 ECMAScript中有5种简单数据类型:Undefined.Null.Boolean.Number和String.还有一种复杂数据类型--Object.ECMAScript不支持任何创建自定义类型的机制,所有值都成为以上6中数据类型之一. 一.typeof操作符,返回数据的类型 typeof操作

javascript 类型检测

javascript类型检测主要包括下面几个方法: typeofinstanceofObject.prototype.toStringconstructorduck type 一.typeof方法 typeof可以检测给定变量的数据类型,对一个值使用typeof操作符可能返回下列某个字符串: “undefined”  如果这个值未定义 “boolean”     如果这个值是布尔值 "string"        如果这个值是字符串 “number”     如果这个值是数值 “obj

Javascript数据类型&mdash;&mdash;number类型

        ECMAScript规范中使用IEEE754格式来表示整数和浮点数.支持十进制.八进制以及十六进制.有一点注意的是八进制数字在严格模式下是无效的,这可能会影响到程序的正常运行. 避免浮点数等值判断:       众所周知,基于IEEE754进行数据计算会产生舍入误差,最为经典的例子: 0.1+0.2 = 0.30000000000000004 ; 0.15+0.15 = 0.3;        在实际开发中应尽量避免使用浮点数的等值判断. NaN:      关于NaN有两点特别

细说JavaScript数据类型及转换

细说JavaScript数据类型及转换 JavaScript数据类型 1.Boolean(布尔) 布尔:(值类型)var b1=true;//布尔类型 2.Number(数字) 数值:(值类型)var n1=3.1415926;//数值类型 n1.toFixed(3);//四舍五入保留3位小数. 3.String(字符串) var s1='hello';//字符串类型 字符串:(值类型,字符串不可变特性) 4.Undefined(未定义) undefined属于值类型,与其他值计算得到的结果不是