数据类型:
值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol。
引用数据类型:对象(Object)、数组(Array)、函数(Function)。
JavaScript 变量均为对象。当您声明一个变量时,就创建了一个新的对象。
注:Symbol 是 ES6 引入了一种新的原始数据类型,表示独一无二的值。
简单理解:
null值表示一个空对象指针。如果定义的变量准备用来保存对象,那么最好将该变量初始化为null而不是其他值。这样一来,只要直接检查null值就可以知道相应的变量是否已经保存了一个对象的引用。
undefined 表示一个未声明的变量,或已声明但没有赋值的变量,或一个并不存在的对象属性。
NaN是一个Number类型的的特殊值,表示“非数字”(Not a Number)。NaN是JavaScript之中唯一不等于自身的值,不等于任何值,包括它本身。NaN在布尔运算时被当作false,NaN与任何数(包括它自己)的运算,得到的都是NaN。当运算失败或者运算无法返回正确的数值时,就会返回NaN。
isNaN()会将括号内的参数利用Number()进行一次转换,故对于字符串、部分对象、部分数组、undefined等,isNaN()会返回true
typeof()函数
typeof()函数返回的是字符串,有六种可能:"number"、"string"、"boolean"、"object"、"function"、"undefined";
不足:typeof()函数不能区分对象、数组、正则,对它们操作都返回"object",正则在Safar5,Chrome7之前的版本中返回"function";
ES6新增:Symbol(ES6新增)=> "symbol"
- console.log(typeof(a)); //typeof(undefined) 为 undefined
- console.log(typeof(b)); //typeof(null) 为 object
- console.log(typeof(c)); //typeof(NaN) 为 number
运算使用
- 在IF条件运算中undefined、null、NaN、false、0、""、false都是相对等于(==)false的,{}和[]是true;
- 其中 "undefined==null" 和 "0==false"、" ' '==false" 的关系运算结果都是true
let a;let b=null;let c=NaN;let d=0;let e={};let f="";console.log(typeof(a)); //typeof(undefined) 为 undefinedconsole.log(typeof(b)); //typeof(null) 为 objectconsole.log(typeof(c)); //typeof(NaN) 为 numberconsole.log(typeof(f)); //typeof(NaN) 为 numberfunction testBoolean(data){if(data){console.log(data+" is true");}else {console.log(data+" is false!");}}testBoolean(a); //undefined的布尔运算值是falsetestBoolean(b); //null的布尔运算值是falsetestBoolean(c); //NaN的布尔运算值是falsetestBoolean(d); //0的布尔运算值是falsetestBoolean(e); //空对象的布尔运算值是truetestBoolean(f); //空字符串的布尔运算值是falseconsole.log('--------------------');console.log(undefined==null); //true,因为undefined是null派生出来的console.log(undefined===null); //false,因为值相同类型不同console.log('--------------------');console.log(false==null); //falseconsole.log(false==undefined); //falseconsole.log(0==null); //falseconsole.log(0==undefined); //falseconsole.log(""==null); //falseconsole.log(""==undefined); //falseconsole.log(null==0); //falseconsole.log('--------------------');console.log(""==0); //trueconsole.log(false==0); //true
注意:如下null和undefined在关系运算中,-在某种意义上,null就是空的意思,undefined就是未定义,两者既不是false也不是true,所以出现null==false以及null==true,你会发现返回的结果都是false,
-但是如果用他们两者作为判断条件的话,在判断条件中他们可以当做false来作为if语句的判断
console.log(undefined==true); //falseconsole.log(undefined==false); //falseconsole.log(null==true); //falseconsole.log(null==false); //false
判断是否为null的方法有:
//方法一
var exp =null;
if (!exp && typeof(exp)!="undefined" && exp!=0) //代表逻辑false,非undefined类型,非false、""
{ alert("is null");
} //方法二
if (exp===null) //绝对相等
{ alert("is null 2");
}
检验空对象或者空数组:
JSON.stringify(obj) === '{}';JSON.stringify(obj) === '[]'
参考网址:NaN的理解 https://www.jianshu.com/p/747d7ee493fc