基本数据类型
Number 类型的判断
1.num 数据 可以分为 数字+0+NaN 其中0 和NaN判断比较令人头疼
判断是不是 Number 类型
val.constructor===number
Object.prototype.toString.call(val)=="[object Number]"
1判断是不是合法的Number
if(typeof val==='number'&&String(val)!='NaN'){
}
2.防止在老版本的浏览器不支持isNaN方法。
var a = "str";
var b = 2;
var c = a/b;
if(!Number.isNaN) {
Number.isNaN = function(n) {
return( typeof(n) === "number" && window.isNaN(n));
}
}
console.log(Number.isNaN(a)); // false
console.log(Number.isNaN(b)); // false
3.利用NaN是唯一一个不等于任何自身的特点。
var a = "str";
var b = 2;
var c = a/b;
function isNaN(n) {
if(n !== n) {
return true;
} else {
return false;
}
}
console.log(isNaN(a)); // false
console.log(isNaN(b)); // false
console.log(isNaN(c)); // true
ES6
isNaN:表示判断是否 是一个Number 类型
NaN(不是一个数字且数据类型为number,另外NaN != NaN)是执行数学运算没有成功,返回失败的结果。但是这个结果仍然是数字类型。
var a = "str";
var b = 2;
var c = a/b;
console.log(isNaN(a)); // true
console.log(isNaN(b)); // false
console.log(isNaN(c)); // true
这个例子中,a的结果是true,b是false,c是true。对于isNaN来说,它是判断一个值是不是NaN,如果是则返回true。但是a是一个字符串,用isNaN判断这个变量a的时候还是会返回true。所以判断一个变量是否为NaN不能使用isNaN()这个方法,可以用以下方法判断。
1.根据NaN的定义判断。
var a = "str";
var b = 2;
var c = a/b;
function isNaN(n) {
if(typeof(n) === "number" && isNaN(n)) {
return true;
} else {
return false;
}
}
console.log(Number.isNaN(a)); // false
console.log(Number.isNaN(b)); // false
console.log(Number.isNaN(c)); // true
2.利用ES6中提供的Object.is()方法。
var a = "str";
var b = 2;
var c = a/b;
console.log(Object.is(a, NaN)); // false
console.log(Object.is(b, NaN)); // false
console.log(Object.is(c, NaN)); // true
3.利用 Number.isNaN()
Number.isNaN(5); //false
Number.isNaN("666666"); //false
Number.isNaN(5*"abc"); //true
Number.isNaN('I love my girlfriend!'); //false,string类型诶,不是number类型,好伤心
string 类型判断
1.string 数据 可以分为 字符串+""+“0” 其中0 和NaN判断比较令人头疼
if(typeof val ==='string'){
}
str2.constructor===String
Object.prototype.toString.call(str2)=="[object String]"
2.判断是非空字符串
if(typeof str=='string'&&str!=""){}
if(typeof str=='string'&&str.length!=0){}
3.判断纯字符串数字
// 整数 字符串
const result = /^\d+$/.test(number)
// 小数 字符串
var reg = /^[\d|\.]*$/;
if(Number(number)+'' !=='NaN'){
console.log('是纯数字')
}else{
console.log('不是纯数字')
}
function isnumber(val) {
var n = Number(val);
if (!isNaN(n)) {
return false;
} else {
return true;
}
}
if(Number(val)==Number(val){
}
以上是整体判断 还可以单个判断 0和9 判断大小
4.判断纯字符串
判断纯字符串数字 以上答案 取反 既可以
undefined 判断
if(typeof (val)=='undefined '){}
String(val)==='undefined'
if(val === undefined)
unll 类型判断
if(val===null)
if(typeof val=='object'&&!val){
}
if(typeof val=='object'&&a instanceof Object){
}
if(String(val)=='null')
var exp = null;
if (!exp && typeof(exp)!=”undefined” && exp!=0)
{
alert(“is null”);
}
复杂数据类型
Arrary 的判断
if(arr instanceof Array)
arr.constructor===Array
Object.prototype.toString.call(str2)=="[object Array]"
if(typeof val==='object'&&JSON.stringly(val).slice(0,1)=='[')
Array.isArray()
Object 的判断
if(obj instanceof Obect)
obj.constructor===Obect
Object.prototype.toString.call(obj)=="[object object ]"
if(typeof val==='object'&&JSON.stringly(val).slice(0,1)=='{')
空对象判断
1.json
if(JSON.stringify(data) == "{}")
2.for in 循环判断 // 可枚举数据
var obj = {};
var b = function() {
for(var key in obj) {
return false;
}
return true;
}
3.Object.getOwnPropertyNames // 获取不可以枚举数据
4.使用ES6的Object.keys()方法 // 可枚举数据
对象===>性质 性质===>对象