知识大全 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之事件绑定 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关于JavaScr
JavaScript模块编程之写法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 随着网站逐渐变
初学Javascript之cookie篇(译) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! [
下拉菜单全攻略之Javascript篇 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 随着互联网
知识大全 JavaScript模式之工厂模式(Factory)应用介绍
JavaScript模式之工厂模式(Factory)应用介绍 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看
20条常见的编码陷阱之JavaScript篇 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 不管
当然这些选择器都是jQuery扩展的一些方法那么使用原生js时要怎样来查找元素呢?今天就来简单梳理下DOM定义了多种查找元素的方法除了我们常用的getElementById()还有getEleme
知识大全 JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例
JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一
如果对作用域函数为独立的对象这样的基本概念理解较好的话理解闭包的概念并在实际的编程实践中应用则颇有水到渠成之感在DOM的事件处理方面大多数程序员甚至自己已经在使用闭包了而不自知在这种情况下对于浏览
typeof 支持基本类型的获取比如booleanstringnumberfunctionobjectundefined 用法 varv=true;//"string" typeofv;/