知识大全 javascript之typeof、instanceof操作符使用

Posted 变量

篇首语:男儿欲遂平生志,五经勤向窗前读。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 javascript之typeof、instanceof操作符使用相关的知识,希望对你有一定的参考价值。

  写javascirpt代码时 typeof和instanceof这两个操作符时不时就会用到 堪称必用 但是!使用它们总是不能直接的得到想要的结果 非常纠结 普遍的说法认为“这两个操作符或许是javascript中最大的设计缺陷 因为几乎不可能从他们那里得到想要的结果”

  typeof

  说明 typeof返回一个表达式的数据类型的字符串 返回结果为js基本的数据类型 包括number boolean string object undefined function

  从说明来看 貌似没什么问题

  下面的代码写了一个数值变量 typeof后的结果是"number"

  代码如下:

  var a = ;

  console log(typeof(a)); //=>number

  如果用Number类型的构造函数new一个变量的话 typeof后的结果是"object"

  复制代码 代码如下:

  var a = new Number( );

  console log(typeof(a)); //=>object

  上面的这两个输出结果看似没啥问题 这一点从书上看来是理所当然的事情 因为javascript就是这么设计的

  但是!问题就在于既然调用了typeof就应该准确返回一个变量的类型 不管是直接用值创建的还是用类型的构造函数创建的 否则!我还用你做啥!

  那么对于

  代码如下:

  var a = ;

  var b = new Number( );

  a和b变量的类型准确的说来都应该是Number才是想要的结果

  而准确的类型信息保存在变量的内部属性 [[Class]] 的值中 通过使用定义在 Object prototype 上的方法 toString来获取

  获取类型信息

  代码如下:

  var a = ;

  var b = new Number( );

  console log(Object prototype toString call(a));

  console log(Object prototype toString call(b));

  输出

  代码如下:

  [object Number]

  [object Number]

  是不是已经很直接了 我们稍微处理一下 得到直接结果

  代码如下:

  var a = ;

  var b = new Number( );

  console log(Object prototype toString call(a) slice( ));

  console log(Object prototype toString call(b) slice( ));

  输出

  Number

  Number

  这就是想要的结果

  为了更好的使用 我们封装一个方法 用来判断某个变量是否是某种类型:

  代码如下:

  function is(obj type)

  var clas = Object prototype toString call(obj) slice( );

  return obj !== undefined && obj !== null && clas === type;

  

  定义一些变量做过测试 先来看看它们的typeof输出

  代码如下:

  var a = ;

  var a =Number( );

  var b ="hello";

  var b =new String("hello");

  var c =[ ];

  var c =new Array( );

  console log("a s typeof:"+typeof(a ));

  console log("a s typeof:"+typeof(a ));

  console log("b s typeof:"+typeof(b ));

  console log("b s typeof:"+typeof(b ));

  console log("c s typeof:"+typeof(c ));

  console log("c s typeof:"+typeof(c ));

  输出

  a s typeof:number

  a s typeof:object

  b s typeof:string

  b s typeof:object

  c s typeof:object

  c s typeof:object

  我们再用新作的函数是一下

  代码如下:

  console log("a is Number:"+is(a "Number"));

  console log("a is Number:"+is(a "Number"));

  console log("b is String:"+is(b "String"));

  console log("b is String:"+is(b "String"));

  console log("c is Array:"+is(c "Array"));

  console log("c is Array:"+is(c "Array"));

  输出

  a is Number:true

  a is Number:true

  b is String:true

  b is String:true

  c is Array:true

  c is Array:true

  注 typeof也不是无用 实际用处是用来检测一个变量是否已经定义或者是否已经赋值

  instanceof

  说明 判断一个对象是否为某一数据类型 或一个变量是否为一个对象的实例

  instanceof 操作符用来比较两个内置类型的变量时一样力不从心 同样会对结果不满意

  代码如下:

  console log("abc" instanceof String); // false

  console log("abc" instanceof Object); // false

  console log(new String("abc") instanceof String); // true

  console log(new String("abc") instanceof Object); // true

  只有在比较自定义的对象时才准确反映关系

  代码如下:

  function Person()

  function Man()

  Man prototype = new Person();

  console log(new Man() instanceof Man); // true

cha138/Article/program/Java/JSP/201311/19924

相关参考

知识大全 浅谈JavaScript之事件绑定

浅谈JavaScript之事件绑定  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关于JavaScr

知识大全 JavaScript模块编程之写法

JavaScript模块编程之写法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  随着网站逐渐变

知识大全 初学Javascript之cookie篇(译)

初学Javascript之cookie篇(译)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  [

知识大全 下拉菜单全攻略之Javascript篇

下拉菜单全攻略之Javascript篇  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  随着互联网

知识大全 JavaScript模式之工厂模式(Factory)应用介绍

JavaScript模式之工厂模式(Factory)应用介绍  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 20条常见的编码陷阱之JavaScript篇

20条常见的编码陷阱之JavaScript篇  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  不管

知识大全 javascript基础之查找元素的详细介绍

  当然这些选择器都是jQuery扩展的一些方法那么使用原生js时要怎样来查找元素呢?今天就来简单梳理下DOM定义了多种查找元素的方法除了我们常用的getElementById()还有getEleme

知识大全 JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例

JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一

知识大全 基于javascript 闭包基础分享

  如果对作用域函数为独立的对象这样的基本概念理解较好的话理解闭包的概念并在实际的编程实践中应用则颇有水到渠成之感在DOM的事件处理方面大多数程序员甚至自己已经在使用闭包了而不自知在这种情况下对于浏览

知识大全 js确定对象类型的方法

  typeof  支持基本类型的获取比如booleanstringnumberfunctionobjectundefined  用法  varv=true;//"string"  typeofv;/