1.typeof 操作符 主要检测基础数据类型

var a="zhangqian";
var b=true;
var c=;
var d;
var e=null;
var f=new Object();
function add(a,b){ return a+b; }
var tmp = new add(); alert(typeof a); //string
alert(typeof b); //number
alert(typeof c); //boolean
alert(typeof d); //undefined
alert(typeof e); //object
alert(typeof f); //object
alert(typeof add ); //function
alert(typeof tmp); // object alert(null == undefined); //输出 "true"
 

note: javascript的函数属于对象类型,null属于object,null 被认为是对象的占位符,如果typeof的对象是正则表达式,

在Safari和Chrome中使用typeof的时候会返回"function",其他的浏览器返回的是object.

如何避免把函数成obj,从而去遍历一个函数的属性呢?  答案: 现代浏览器基本都会返回成function.

但是对于装箱后的类型:

比如:

var str = 'asdf';
var str1 = new String('asdf');
typeof str; //"string"
typeof str1; //"object"
console.log(str); // 'asdf'
console.log(str1); // String {0: "a", 1: "s", 2: "d", 3: "f", length: 4, [[PrimitiveValue]]: "asdf"}
console.log( Object.prototype.toString.call(str) ) ; //"[object String]"
Object.prototype.toString.call(str1); //"[object String]"
Object.prototype.toString.call(str) === "[object String]" // 所以最保险的方法是这样判断

note: js中的==和 ===,与!= 和!==  ( (等同)双等于会自动转换类型然后匹配, (恒等)三等于不会转换类型,即要求类型和内容完全相等为true)  !=和!==依此类推

var num = ;
var tmp = '';
console.log(num == tmp); // true
console.log(num === tmp); // false

2.instanceof 主要检测引用类型

var array=new Array();
var object=new Object();
var regexp=new RegExp();
function Person(){};
var p=new Person(); alert(array instanceof Array); //true
alert(object instanceof Object); //true
alert(regexp instanceof RegExp); //true
alert(p instanceof Person); //true alert(array instanceof Object); // true
alert(regexp instanceof Object); // true

note: Object是所有对象的基类,所以在alert(array instanceof Object) 返回的结果同样也是true.

js判断null

var exp = null;
if (!exp && typeof exp != "undefined" && exp != )
{
alert("is null");
} typeof exp != "undefined" 排除了 undefined;
exp != 排除了数字零和 false。 更简单的正确的方法:
var exp = null;
if (exp === null)
{
alert("is null");
}

判断数值

isNaN(x)
如果 x 是特殊的非数字值 NaN(或者能被转换为这样的值),返回的值就是 true。如果 x 是其他值,则返回 false。 更具体的判断方法
/^\d+$/  //非负整数(正整数 + 0)
/^[-]*[-][-]*$/  //正整数
/^((-\d+)|(+))$/  //非正整数(负整数 + 0)
/^-[-]*[-][-]*$/  //负整数
/^-?\d+$/    //整数
/^\d+(\.\d+)?$/  //非负浮点数(正浮点数 + 0)
/^(([-]+\.[-]*[-][-]*)|([-]*[-][-]*\.[-]+)|([-]*[-][-]*))$/  //正浮点数
/^((-\d+(\.\d+)?)|(+(\.+)?))$/  //非正浮点数(负浮点数 + 0)
/^(-(([-]+\.[-]*[-][-]*)|([-]*[-][-]*\.[-]+)|([-]*[-][-]*)))$/  //负浮点数
/^(-?\d+)(\.\d+)?$/  //浮点数 var r = /^[-]*[-][-]*$/  //正整数
r.test(str); //str为你要判断的字符 执行返回结果 true 或 false

一些其它方式判断数值(但都不好):

http://www.jb51.net/article/75813.htm

js 区分数组和对象的方法:
var obj = {name:'xxx',pass:'2232'};
var arr = [1,2,3,4];

1.
if(obj instanceof Array){  } // false  
if(arr instanceof Array){  } // true

2. 通过length属性
obj.length  // undefined
arr.length  // 0 ...  总之大于等于0

3.通过继承的原型对象
Object.prototype.toString.call(obj) === '[object Array]'

note:
不可以通过 typeof(arr) 的方法 ,因为obj和arr都会返回 object

												

js判断变量类型,类型转换,的更多相关文章

  1. 16. js 判断变量类型,包括ES6 新类型Symbol

    相信大家在开发中遇到需要判断变量类型的问题,js变量按存储类型可分为值类型和引用类型,值类型包括Undefined.String.Number.Boolean,引用类型包括object.Array.F ...

  2. console.log、toString方法与js判断变量类型

    Java调用system.print.out()是会调用toString方法打印js里的console.log也是控制台打印,很多时候,我们以为也是调用toString方法,其实并不是.我们在chro ...

  3. JS判断变量类型

    typeof v 只能用于识别基础类型,不能识别对象 v instanceof MyClass 判断类型 Object.prototype.toString.call(v.p) === "[ ...

  4. PHP判断变量类型和类型转换的三种方式

    前言: PHP 在变量定义中不需要(不支持)明确的类型定义.变量类型是根据使用该变量的上下文所决定的.所以,在面对页码跳转.数值计算等严格的格式需求时,就要对变量进行类型转换. 举例如下: $foo ...

  5. html5 -js判断undefined类型

    js判断undefined类型 今天使用showModalDialog打开页面,返回值时.当打开的页面点击关闭按钮或直接点浏览器上的关闭则返回值是undefined所以自作聪明判断 var reVal ...

  6. JavaScript 变量克隆和判断变量类型

    一.变量克隆 在js中经常会遇到将一个变量赋值给一个新的变量这种情况,这对于基本类型很容易去实现,直接通过等号赋值就可以了,对于引用类型就不能这样了.(注:像函数,正则也可以直接通过等号赋值) 这里我 ...

  7. js判断undefined类型,undefined,null,NaN的区别

    js判断undefined类型 今天使用showModalDialog打开页面,返回值时.当打开的页面点击关闭按钮或直接点浏览器上的关闭则返回值是undefined   所以自作聪明判断       ...

  8. Javascript 判断变量类型的陷阱 与 正确的处理方式

    Javascript 由于各种各样的原因,在判断一个变量的数据类型方面一直存在着一些问题,其中最典型的问题恐怕就是 typeof null 会返回 object 了吧.因此在这里简单的总结一下判断数据 ...

  9. js判断undefined类型,undefined,null, 的区别详细解析

    js判断undefined类型 今天使用showModalDialog打开页面,返回值时.当打开的页面点击关闭按钮或直接点浏览器上的关闭则返回值是undefined所以自作聪明判断 var reVal ...

随机推荐

  1. OpenStack Grizzly版本部署(离线)

    参考原版地址:https://github.com/mseknibilel/OpenStack-Grizzly-Install-Guide 图转自原版地址 部署拓扑: 部署环境:vmware stat ...

  2. xml中Node和Element的区别

    本文转载自:http://blog.csdn.net/wcydiyi/article/details/4432636点击打开链接 1.元素(Element)和结点(Node)的区别:         ...

  3. python__基础 : 类的__new__方法与实现一个单例

    __new__ : 这个方法的作用主要是创建一个实例,在创建实例时首先会调用 __new__方法 ,然后调用__init__对实例进行初始化, 如果想修改 __new__ 这个方法,那么最后要 ret ...

  4. ios 苹果内购订单验证 --- php实现

    验证函数: function appleVerify($receipt_data,$orderId = 0) { /* * 21000 App Store不能读取你提供的JSON对象 * 21002 ...

  5. linux 共享内存

    共享内存是最高效的IPC机制,因为它不涉及进程之间的任何数据传输.这种高效带来的问题是,我们必须用其他手段来同步进程对共享内存的访问,否则会产生竞态条件.所以,共享内存通常和其他进程间通信方式一起使用 ...

  6. POJ-2251 三维迷宫

    题目大意:给一个三维图,可以前后左右上下6种走法,走一步1分钟,求最少时间(其实就是最短路) 分析:这里与二维迷宫是一样的,只是多了2个方向可走,BFS就行(注意到DFS的话复杂度为O(6^n)肯定会 ...

  7. JVM——九大工具助你玩转Java性能优化

    本文转载自 http://www.importnew.com/12324.html 本文由 ImportNew - 陈 晓舜 翻译自 idrsolutions.欢迎加入翻译小组.转载请参见文章末尾的要 ...

  8. python的列表生成式和生成器

    1.列表生成式是Python受欢迎的语法之一,通过一句简洁的语法就可以对一组元素进行过滤,还可以对得到的元素进行转换处理,语法格式为: [exp for val in collection if co ...

  9. 栈和队列&前缀,中缀,后缀

    1.堆和栈的区别? (1)栈内存操作系统来分配,堆内存由程序员自己来分配. (2)栈有系统自动分配,只要栈 剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出. 2.栈(线性表) 仅 ...

  10. centos使用--vim配置和推荐插件使用

    目录 1.vimrc的配置内容 2.Vundle使用 简介 安装vundle 配置vundle插件: 安装需要的插件 移除不需要的插件 其他常用命令 3 使用插件 3.1 NERDTree 3.2 e ...