数据类型及数据类型的检测

基本数据类型

number  string  boolean  underfined  null;

引用数据类型

Object  Array  RegExp;



typeof 检测数据类型 但是不能检测(对象、数组、正则)

instanceof/constructor检测某一个实例是否属于一个类;

我们的constructor可以避免instanceof检测的时候,用Object也是true的问题;

console.log([].constructor === Object);//->false 

局限性:
1、用instanceof检测的时候,只要当前的这个类在实例的原型链上(可以通过原型链__proto__找到它),检测出来的结果都是true
2、基本数据类型不能用instanceof来检测;



对于对象数据类型,两种方式创建出来的都是所属类的一个实例,而且都是对象数据类型的值,是没有区别的,

var ary =[];
var ary = new Array;

对于基本数据类型来说,不管哪种方式创建出来的都是所属类的一个实例,但字面量创建出来的是基本数据类型,实例创建的是对象数据类型

var num =1;
 var num2 = new Number("1");
console.log(typeof num1,typeof num2);//->"number" "object"

3、在类的原型继承中,instanceof检测出来的结果其实是不准确的

function Fn(){
} ;
Fn.prototype = new Array;
var f = new Fn;
console.log(f instanceof Array)-> true;

虽然Fn继承了Array,但是f没有length和数字索引那些东西,所以f应该不是数组才对,但是instance检测结果是true,以为f虽然不是数组,但是在f的原型链上可以找到Array;


Object.prototype.toString.call(value)

1)找到Object原型上的toString方法,让方法执行,并且让方法中的this变为value(value->就是我们要检测数据类型的值);

->toString:一个方法,转换为字符串数据类型用的方法
每一个数据类型所属类的原型上都有toString方法,例如:Number.prototype/String.prototype/Array.prototype/Function.prototype...
除了Object上的toString,其他类原型上的toString都是把当前的数据值转换为字符串的意思

->null和undefined比较的特殊:他们所属类Null/Undefined的原型上也有toString,只不过不让我们用而已,不仅如此其实类的原型都给屏蔽了;

->HTML元素对象的toString:虽然它的原型链很长,但是在其它类的原型上都没有toString,只有在最底层Object.prototype这上才有;

var oDiv = document.getElementById("div1");
oDiv.toString();调用的其实也是Object.prototype.toString...

->alert、document.write这两种输出的方式其实都是把要输出的内容先转换为字符串,然后在输出的

alert([]);//->""
 alert(true);//->"true"
 alert({})->这个就要调用Object.prototype上的toString了 

Object.prototype.toString是用来返回对应值的所属类信息的

var oDiv = document.getElementById("div1");
 var obj = {};
 oDiv.toString();//->"[object HTMLDivElement]"
 obj.toString();//->"[object Object]"

原理:
->obj首先找到原型上toString方法,并且让toString执行,toString方法执行的时候,里面的this是obj,

同理oDiv.toString(),toString方法中的this是oDiv

->执行toString方法,返回当前方法中this的数据类型 ->"[object 当前this的直属类]",

例如:"[object HTMLDivElement]"/"[object Object]"

Object.prototype.toString.call(12);->执行原型上的toString,并且让方法中的this变为12,也就相当于返回的是12的直属类的信息 ->"[object Number]"

Object.prototype.toString.call("hjj");//->"[object String]"
依此类推:
"[object Boolean]"/"[object Null]"/"[object Undefined]"/"[object Object]"/"[object Array]"/"[object RegExp]"/"[object Function]"/"[object Math]"/"[object Date]"...
->所有的数据类型都可以用它来检测,而且非常的精准;

时间: 2024-08-24 22:30:25

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

js中的数据类型,以及如何检测数据类型

基本数据类型:string,number,boolean,null,undefined,symbol 引用数据类型:object(array,function...) 常用的检测数据类型的方法一般有以下三种: 1.typeof 一般主要用来检测基本数据类型,因为它检测引用数据类型返回的都是object 还需要注意的一点是:typeof检测null返回的也是object(这是JS一直以来遗留的bug) typeof 1 "number" typeof 'abc' "string

js数据类型、数据类型的检测

 一 .JS 的数据类型 数据类型就是一个变量里面存储的是一个什么样子的数据 JS 里面的数据类型分成两个大类,基本数据类型(又称简单数据类型)和引用数类型. 1.基本数据类型(简单数据类型) -> Number 数值 -> String 字符串 js里面单引号双引号没有区别 -> Boolean 布尔 布尔类型只有两个值 1 和 0  布尔类型就是来表示 真 或者 假 true: 表示的就是 真, 在计算机存储的时候存储的就是 1  false: 表示的就是 假, 在计算机存储的时候存

Java数据类型(基本数据类型和引用数据类型)

Java数据分为基本数据类型和引用数据类型.其中基本数据类型有4类8种. 基本数据类型:类似于普通的值 引用数据类型:传递的是内存的地址 对于引用类型来说,声明只会分配一个引用,指向null, 当你想使用的时候不能直接引用,必须实例化之后才能使用.否则,会引起空指针exception. 基本数据类型: Java数据类型(基本数据类型和引用数据类型),布布扣,bubuko.com

java笔记------(变量、基本数据类型、数据类型的转换)

一.变量:变量即在程序运行过程中它的值是允许改变的量.(存数据的,代词,指代它所存的那个数) 1)声明: int a; //声明整型变量,名为a int b,c,d; //声明三个整型变量,名为b,c,d 2)命名: 2.1)只能包含字母.数字._.$符,并且不能以数字开头 2.2)严格区分大小写 2.3)不能使用关键字 2.4)可以中文命名,但不建议 2.5)建议:见名知意.驼峰命名法 3)初始化:第一次赋值 3.1)声明同时初始化 nt a = 250; 3.2)先声明后初始化 int a;

Python数据类型-1 数据类型介绍

数据类型 在python这门语言中,数据类型分为两种. 内置的和自定义的. 内置的包括数字.字符串.布尔.列表.元组.字典.Bytes.集合这些常用的以及一些不太常用的数据类型.而自定义的,一般以类的形式,根据需要组合以上内置类型成为独特的数据类型. 数据类型是Python语言非常重要的部分(哪部分不重要?),尤其是不同数据类型所支持的原生操作,更是重中之重,需要熟练的背在脑海里.很多时候,写大型项目时,不需要你多复杂的技巧,只需要用这些数据操作方法就可以. 原因之一,更好的分配管理内存,节省不

js基本数据类型+判断数据类型方法

摘要:不管是什么类型的,Object.prototype.toString.call();都可以判断出其具体的类型,简单基本类型(String.Number.Boolean.Null.Undefined)不是对象,复杂基本类型都为对象子类型,函数是特殊的对象子类型(可调用对象) 数据类型分为基本类型和引用类型: 基本类型:String.Number.Boolean.Null.Undefined.symbol(ES6) 引用类型:Object.Array.Date.Function.Error.R

day02_变量_基本数据类型_数据类型的转换_Scanner_20150731

回顾: 昨天主要讲了3个方面的内容: 1.Linux 操作系统.开源的.免费 服务器端 目录.挂载点.安全级别高 /:根目录 /home/soft01:主目录/家 2.java开发环境 1).java源文件,经过编译,生成.class字节码文件 JVM加载.class并运行.class 跨平台.一次编程到处使用 2)JVM:java虚拟机 加载并运行.class JRE:java运行环境 除了包含JVM以外还包含运行java程序所需要的必须的环境 JRE=JVM+java系统类库 JDK:jav

JavaScript的五种数据类型以及数据类型的转换

数据类型 1.Number包括整数和浮点数 1,2.34 2.String字符串数据类型 " " 或者 ' '构成 var s="hello" var s2 = "\u4f60\u597d\n欢迎来到\"JavaScript\世界\\"" alert(s2); 3.Boolean : true,false用于条件判断 if (false) { alert("sucess!") } 4.Undefiend:u

原生JS-----论数据类型检测

常见的数据类型检测的方法: 一.最为基础的typeof 二.不可不知的instanceof 三.比instanceof更好的constructor 四.检测值或者表达式的结果是否为NaN 五.易用的jQuery函数isArray,isFunction 六.高大上的原型方法Object.prototype.toString typeof基本数据类型的检测: 语法:typeof  被检测的内容  或者 typeof(要检测的内容) 范例: <script> var num=2; console.l