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 ...
随机推荐
- ethereum(以太坊)(八)--Address
pragma solidity ^0.4.0; contract Test{ address _owner; uint160 _c; constructor() public{ _owner = 0x ...
- Form表单提交,js验证
Form表单提交,js验证 1, Onclick() 2, Onsubmit() Button标签 input (属性 submit button )标签 Input type=button ...
- MySQL触发器和更新操作
一.触发器概念 触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动 ...
- [CodeForces954D]Fight Against Traffic(最短路)
Description 题目链接 Solution 从起点和终点分别做一次最短路并记录结果 枚举每一条可能的边判断 Code #include <cstdio> #include < ...
- 总结 Date 2017.09.23
总结 Date 2017.09.23 <1>统计数字 某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*10^9).已知不相同的数不超过10000个,现在需要统计 ...
- 17-比赛1 F - 较小元素 Weak in the Middle (set)
Seg-El has last chance to make the final changes in order to prevent the destruction of Krypton. He ...
- python lamba表达式
lambda函数也叫匿名函数,即,函数没有具体的名称. g=lambda x:x**2 def f(x): return x**2 lambda语句中,冒号前是参数,可以有多个,用逗号隔开,冒号右边是 ...
- CC3200在AP模式的TCP sock作为客户端连接时返回SL_ECONNREFUSED(-111) Connection refused
1. CC3200处于AP模式(电脑无线连接CC3200的WIFI信号),开启一个TCP socket,这个socket作为TCP客户端去连接TCP服务器端 struct sockaddr_in ad ...
- gVim的 设置
在.vimrc中添加以下代码后,重启vim即可实现按TAB产生4个空格:set ts=4 (注:ts是tabstop的缩写,设TAB宽4个空格)set expandtab TAB替换为空格::set ...
- istringstream输入数据到数组
istringstream iss(line); ; while (!(iss >> dat[n]).fail()) n++;