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 ...
随机推荐
- 小程序里面使用wxParse解析富文本导致页面空白等
在部分安卓手机上会出现白屏的情况且有些ios手机上图文混排上,图片显示不出问题 解决:把插件里面的console.dir去掉即可(原因在于安卓手机无法解析console.dir) 有些图片解析出来下面 ...
- 1,版本控制git--仓库管理
再开始这个话题之前,让我想起了一件很痛苦的事情,在我大学写毕业论文的时候,我当时的文件是这样保存的 毕业论文_初稿.doc 毕业论文_修改1.doc 毕业论文_修改2.doc 毕业论文_修改3.d ...
- SpringMVC---简单登录例子
所需jar包aopalliance-1.0.jar.commons-logging-1.2.jar.spring-aop-5.0.0.RELEASE.jar.spring-beans-5.0.0.RE ...
- lintcode
public class Solution { /** * @param s: The first string * @param b: The second string * @return tru ...
- 《Cracking the Coding Interview》——第1章:数组和字符串——题目3
2014-03-18 01:32 题目:对于两个字符串,判断它们是否是Anagrams. 解法:统计俩单词字母构成是否相同即可. 代码: // 1.3 Given two strings, write ...
- leetcode 【 Linked List Swap Nodes in Pairs 】 python 实现
题目: Swap Nodes in Pairs Given a linked list, swap every two adjacent nodes and return its head. For ...
- 收集的java面试题
1.谈谈final, finally, finalize的区别. final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承.因此一个类不能既被声明为 ...
- iOS笔记057 - UI总结03
控制器的父子关系 1.控制器父子关系的建立原则 如果2个控制器的view是父子关系(不管是直接还是间接的父子关系),那么这2个控制器也应该为父子关系 [self.view addSubv ...
- chromedriver版本支持的Chrome版本
下载chromedriver,链接:http://chromedriver.storage.googleapis.com/index.html chromedirver版本 支持的Chrome版本 ...
- .net 匿名方法
匿名方法 核心就是lambda语法,下面是使用举例: var conn= MySqlHelper.GetConn(); var list=conn.Query<User>("SE ...