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 ...
随机推荐
- python——input()函数
在使用input()内置函数输入数字时,要注意一点: input()的返回值始终是字符串,所以type(number)永远是<class 'str'>! 如: >>> t ...
- 17-比赛1 C - Binary Nim (栈的游戏)
题目描述 Tweedle-Dee 和 Tweedle-Dum 正在进行一场激烈的二进制 Nim 游戏.这是你没有玩过的船新版本,游戏包含 N 个栈,每个栈只包含 0 和 1 的元素.就像一般的 Nim ...
- java线程安全总结 - 2 (转载)
原文地址:http://www.jameswxx.com/java/%E7%BA%BF%E7%A8%8B%E5%AE%89%E5%85%A8%E6%80%BB%E7%BB%93%EF%BC%88%E4 ...
- CodeForces 547E Mike and Friends AC自动机 主席树
题意: 给出\(n\)个字符串\(s_i\)和\(q\)个询问: \(l,r,k\):\(\sum\limits_{i=l}^{r}count(i, k)\),其中\(count(i,j)\)表示\( ...
- CSS的z-index & 绝对定位与相对定位
1.在有些情况下,需要仔细地控制元素在网页中堆叠顺序.z-index样式属性让你能够设置元素的堆叠顺序. 堆叠元素时,z-index值较大的元素在z-index值较小的下面. 2.z-index值仅在 ...
- 《Cracking the Coding Interview》——第18章:难题——题目1
2014-04-29 00:56 题目:不用算数运算,完成加法. 解法:那就位运算吧,用加法器的做法就可以了. 代码: // 18.1 add two numbers wihout using ari ...
- 《Cracking the Coding Interview》——第17章:普通题——题目3
2014-04-28 22:18 题目:计算N的阶乘尾巴上有多少个零? 解法:计算5的个数即可,因为2 * 5 = 10,2的个数肯定比5多.计算5的个数可以在对数时间内搞定. 代码: // 17.3 ...
- ueditor搭建图片服务器
最近用使用富文本编辑器,之前一直使用kindeditor和eWebEditor来着,有同事给推荐说使用百度推出的Ueditor,所以咯,自己新项目就将它引进来了,这里说一下心得, 说实话,Uedito ...
- win7 64位如何共享XP上的打印机?
这个问题看似很简单,但是一旦你遇到了,就会发觉不是想象的那么简单. 除了网上能搜到的一些设置之外,这里还有几个诀窍: 1.首先你必须准备你的打印机的64位驱动程序 2.你在win7上必须采用添加本地打 ...
- webdriver--设置元素等待
sleep():脚本执行到某一位置时“睡一会”,再继续执行:参数的单位是s:sleep方法由python的time模块提供,有两种引入和使用方式 import time time.sleep(5) f ...