typeof和instanceof简介及用法
typeof
使用方式:typeof a 或者 typeof (a) 返回一个string类型的值
顾名思义,这货是检查类型的,输出的是一个string值,直接看下面的检测代码:
console.log(typeof 'i am a string'); // string console.log(typeof true); // boolean console.log(typeof 10); // number console.log(typeof undefined); // undefined console.log(typeof function() {}); // function console.log(typeof null); // object console.log(typeof new String('i am a string')); // object console.log(typeof new Boolean(true)); // object console.log(typeof new Number(10)); // object console.log(typeof [1, 2, 3, 4]); // object console.log(typeof new Array(1, 2, 3, 4)); // object console.log(typeof new Date()); // object console.log(typeof new RegExp('hello world', 'g')); // object console.log(typeof /hello/g); // object
这货最大的短板就是对null和数组的检测不利(都只能返回object)!
typeof除了能初步检测变量的类型外,还能判断一个变量是否为空(没赋值或者没声明):
var a; if(typeof a === 'undefined') { console.log('hello'); // hello } if(a === undefined) { console.log('world') // world }
有趣的是没赋值和没声明的元素经过typeof运算后得到的结果一样,都是“undefined”字符串(因为本来就都是typeof undefined):
var a; console.log(typeof a === typeof b); // true
这时该如何区别?可以用 in window 判断:
var a; console.log('a' in window); // true console.log('b' in window); // false
相对于instanceof,typeof还是比较简单的~
instanceof
使用方式:a instanceof b 返回一个boolean值
instanceof的英文解释是实例,它的作用是判断某个变量是否为某一对象的实例。看检测代码:
console.log('string' instanceof String); // false console.log(true instanceof Boolean); // false console.log(10 instanceof Number); // false console.log(undefined instanceof Object); // false console.log(null instanceof Object); // false console.log({} instanceof Object); // true console.log(new String('string') instanceof String); // true console.log(new Boolean(true) instanceof Boolean); // true console.log(new Number(10) instanceof Number); // true console.log([] instanceof Array); // true console.log(new Array() instanceof Array); // true console.log(new Date() instanceof Date); // true console.log(new RegExp('') instanceof RegExp); // true console.log(/hello/ instanceof RegExp); // true
我们可以看到,instanceof规定基本数据类型(比如'string'、true、10等)都不能算是对象的实例,而new的一般都算。
instanceof的第一个值(即a instanceof b中的a)必须先进行过声明,不然报错;而typeof则可对未声明变量进行判断(返回"undefined")。
typeof和instanceof简介及用法的更多相关文章
- js中typeof与instanceof的不同用法
typeof用以获取一个变量或者表达式的类型,typeof一般只能返回如下几个结果: number,boolean,string,function(函数),object(NULL,数组,对象),und ...
- JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式
相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对 ...
- javascript中typeof和instanceof用法的总结
今天在看相应的javascript书籍时,遇到了typeof和instanceof的问题,一直不太懂,特地查资料总结如下: JavaScript 中 typeof 和 instanceof 常用来判断 ...
- typeof 和 instanceof apply与call简单用法以及判断数组的坑
1 typeof 和 instanceof var array = [];平时如果判断一个对象是否为数组,可能你会用 typeof array,但是输出为“object”. typeof 一般只能返回 ...
- typeof()和instanceof()用法区别
typeof()和instanceof()用法区别: 两者都是用来判断数据类型的 typeof()是能用来判断是不是属于五大类型Boolean,Number,String,Null,Undefined ...
- JS中typeof和instanceof用法区别
typeof和instanceof都可以用来判断变量 1.typeof用以获取一个变量或者表达式的类型,typeof一般只能返回如下几个结果: number,boolean,string,functi ...
- 比较typeof与instanceof?
相同点:JavaScript 中 typeof 和 instanceof 常用来判断一个变量是否为空,或者是什么类型的. typeof的定义和用法:返回值是一个字符串,用来说明变量的数据类型. 细节: ...
- JS中typeof和instanceof的用法和区别
typeof和instanceof的区别 instanceof 常用来判断一个变量是否为空,或者是什么类型的.但它们之间还是有区别的 instanceof的用法 instanceof返回的是一个布尔值 ...
- typeof、instanceof、hasOwnProperty()、isPrototypeOf()
typeof 操作符 instanceof 操作符 hasOwnProperty()方法 isPrototypeOf()方法 1.typeof 用于获取变量的类型,一般只返回以下几个值:string, ...
随机推荐
- win10中文简体繁体切换快捷键
win10中文简体繁体切换快捷键Ctrl+Shift+F
- MFC 网络编程 -- 总结
原文链接:http://www.cnblogs.com/lidabo/archive/2012/07/19/2598734.html 1.基于 TCP 的 socket 编程 /* 服务器端程序流程: ...
- 阿里云数据库RDS环境搭建
前言 现在云数据库越来越流行,国外的亚马逊AWS微软Azure,国内的BAT和京东都推出了自己的云数据库服务,各自优劣不表,个人推荐国外的用AWS,国内的用阿里云,这是我这几天刚申请的阿里云的过程的一 ...
- emacs24下使用jedi对python编程进行补全
在开始前先装好pip和virtualenv(见pip的安装一文),另需安装好make 1.emacs下安装: epc deferred.el auto-complete 使用M-x package-i ...
- p2p投资理财入门篇(新手必备)
在互联网金融浪潮下,如果你只知道余额宝.理财通,如果你认为宝宝们就可以代表整个互联网金融,那可真是大错特错.这些年来,P2P这股强大势力一直在互联网金融领域兴风作浪,随着被高层正名.监管升级,P2P的 ...
- uva 816 abbott's revenge ——yhx
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAncAAAN5CAYAAABqtx2mAAAgAElEQVR4nOy9sY4jydKezVuoayhH0r
- 【Ext.Net学习笔记】02:Ext.Net用法概览、Ext.Net MessageBus用法、Ext.Net布局
Ext.Net用法概览 Ext.Net还是很强大,如果运用熟练可以极大的提高编程效率.如果你也要学习Ext.Net,原文博主推荐书籍:<Ext.Net Web 应用程序开发教程>,是英文的 ...
- 分享一个解决MySQL写入中文乱码的方法
分享一个解决MySQL写入中文乱码的方法 之前有发帖请教过如何解决MySQL写入中文乱码的问题.但没人会,或者是会的人不想回答.搜索网上的答案并尝试很多次无效,所以当时就因为这个乱码问题搁浅了一个软件 ...
- css中table tr:nth-child(even)改变tr背景颜色: IE7,8无效
例如: .my_table tr:nth-child(even){ background:#E6EDF5; } .my_table tr:nth-child(odd){ background:#F0F ...
- UVA 11992 Fast Matrix Operations (二维线段树)
解法:因为至多20行,所以至多建20棵线段树,每行建一个.具体实现如下,有些复杂,慢慢看吧. #include <iostream> #include <cstdio> #in ...