js判断变量类型,类型转换,
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判断变量类型,类型转换,的更多相关文章
- 16. js 判断变量类型,包括ES6 新类型Symbol
相信大家在开发中遇到需要判断变量类型的问题,js变量按存储类型可分为值类型和引用类型,值类型包括Undefined.String.Number.Boolean,引用类型包括object.Array.F ...
- console.log、toString方法与js判断变量类型
Java调用system.print.out()是会调用toString方法打印js里的console.log也是控制台打印,很多时候,我们以为也是调用toString方法,其实并不是.我们在chro ...
- JS判断变量类型
typeof v 只能用于识别基础类型,不能识别对象 v instanceof MyClass 判断类型 Object.prototype.toString.call(v.p) === "[ ...
- PHP判断变量类型和类型转换的三种方式
前言: PHP 在变量定义中不需要(不支持)明确的类型定义.变量类型是根据使用该变量的上下文所决定的.所以,在面对页码跳转.数值计算等严格的格式需求时,就要对变量进行类型转换. 举例如下: $foo ...
- html5 -js判断undefined类型
js判断undefined类型 今天使用showModalDialog打开页面,返回值时.当打开的页面点击关闭按钮或直接点浏览器上的关闭则返回值是undefined所以自作聪明判断 var reVal ...
- JavaScript 变量克隆和判断变量类型
一.变量克隆 在js中经常会遇到将一个变量赋值给一个新的变量这种情况,这对于基本类型很容易去实现,直接通过等号赋值就可以了,对于引用类型就不能这样了.(注:像函数,正则也可以直接通过等号赋值) 这里我 ...
- js判断undefined类型,undefined,null,NaN的区别
js判断undefined类型 今天使用showModalDialog打开页面,返回值时.当打开的页面点击关闭按钮或直接点浏览器上的关闭则返回值是undefined 所以自作聪明判断 ...
- Javascript 判断变量类型的陷阱 与 正确的处理方式
Javascript 由于各种各样的原因,在判断一个变量的数据类型方面一直存在着一些问题,其中最典型的问题恐怕就是 typeof null 会返回 object 了吧.因此在这里简单的总结一下判断数据 ...
- js判断undefined类型,undefined,null, 的区别详细解析
js判断undefined类型 今天使用showModalDialog打开页面,返回值时.当打开的页面点击关闭按钮或直接点浏览器上的关闭则返回值是undefined所以自作聪明判断 var reVal ...
随机推荐
- JDK5 新特性
JDK5新特性目录导航: 自动拆装箱 Foreach 静态导入 可变参数 Var args 枚举 格式化输出 泛型 ProcessBuilder 内省 线程并发库(JUC) 监控和管理虚拟机 元数据 ...
- css 自动换行,超出省略号代替
overflow : hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; ...
- 虚拟机linux桥接联网问题
Linux系统为redhat5.8 虚拟机的版本:vm8.0 本人刚刚开始接触linux,今日需要通过linux进行联网,因此也学习了一点点关于虚拟机的联网的知识,在此与大家进行分享,希望大家可以之处 ...
- C++ 基础 初始化列表
当一个类组合了其他类,或者使用了 const 成员,就要用 初始化列表. Class A {...}; Class B {...}; Class C { private: A a; B b; int ...
- 基于pandas进行数据预处理
很久没用pandas,有些有点忘了,转载一个比较完整的利用pandas进行数据预处理的博文:https://blog.csdn.net/u014400239/article/details/70846 ...
- U2
android的XML文件(包括layout下的和values下的)注释一般采用 <!--注释内容 -->的方式进行,也就是说,采用//是行不通的,不信你可以试试看. 在XML中, ...
- python基础之内置函数补充、匿名函数、递归函数
内置函数补充 python divmod()函数:把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b) 语法: 1 divmod(a, b) #a.b为数字,a为除数 ...
- 初见spark-03(高级算子)
最近心情不是很好,但是需要调节自己,真的需要调节自己,还是要努力,这个世界有我喜欢的人,有我追求的人,也许真的是守的住寂寞,耐得住繁华吧. 不说别的了,今天我们来接受啊spark的高级算子的系列 1. ...
- TouTiao开源项目 分析笔记11 以总体到局部的思路 构建图片主列表
1.构建图片主列表的整体片段PhotoTabLayout 1.1.首先创建一个PhotoTabLayout片段 public class PhotoTabLayout extends Fragment ...
- 15.4,redis不重启,切换RDB备份到AOF备份
确保redis版本在2.2以上 [root@pyyuc /data ::]#redis-server -v Redis server v= sha=: malloc=jemalloc- bits= ...