NaN的理解和用法:
NaN 属性是代表非数字值的特殊值。该属性用于指示某个值不是数字。可以把 Number 对象设置为该值,来指示其不是数字值。
Number.NaN 是一个特殊值,说明某些算术运算(如求负数的平方根)的结果不是数字。通常用于检测 parseFloat()
和 parseInt()
的结果,以判断它们表示的是否是合法的数字。当然也可以用 isNaN()
函数来检测算数错误,比如用 0
作除数的情况。
注意:请使用 isNaN() 来判断一个值是否是NaN属性。原因是 NaN 与所有值都不相等,包括它自己。
var aa=0/0;
if(isNaN(aa)){ //isNaN()方法时判断数值是NaN类型的方法;console.log("aa 是非数值");
}
Undefined的理解和使用:
undefined 是全局对象的一个属性,表示声明但没有赋值的变量,或一个并不存在的对象属性。
注意:
1、不能使用for/in 来 undefined 属性,也不能使用delete运算符来删除它,
2、undifined不是常量,可以把它设置为其他值;比如var undefined='foo'
3、可以使用 propName===“undefined” typeof(propName)===“undefined”或 的形式确定变量是否是undefined;
4、一个函数如果没有使用return指定返回值,将会返回一个undefined值;
5、null==undefined ;
6、undefined 作为if(undefined){}的条件时是false;!undefined作为条件时相当于true;
(function(){var b,c=NaN,d="",e=false,f={},g=null,h={name:"zhangsan",age:27};console.log(b); //输出undefined,未赋值的变量console.log(h.class); //输出undefined,并不存在的对象属性console.log(typeof(undefined)); //输出undefined,类型console.log(b==undefined); //输出true, null==undefinedconsole.log(b===undefined); //输出true,可以作为变量的条件判断console.log(undefined==undefined);//输出trueconsole.log(undefined===undefined);//输出trueconsole.log(undefined==NaN); //输出falseconsole.log(undefined==""); //输出falseconsole.log(undefined==false); //输出falseconsole.log(undefined=={}); //输出falseconsole.log(undefined==null); //输出trueconsole.log(undefined===null); //输出false,undefined和null不能绝对相等//console.log(k); //未声明变量会报错:k is not definedfunction test(n){console.log(typeof(n));} //输出undefinedconsole.log(test()); //输出undefinedvar undefined='foo'; //这样使得undefined的值和类型都发生了改变,要避免这样使用console.log(undefined,typeof(undefined)); //输出foo stringconsole.log(undefined);//输出undefinedconsole.log(!undefined);//输出true})();
7、typeof()的使用
a、typeof()不会在变量未声明的情况下报错:
if(typeof(x)==="undefined"){console.log("typeof方法不会再变量未声明的情况下报错");}
b、typeof() 方法返回的字符串有6种可能,分别是:number、string、boolean、object 、function 、 undefined
NULL的理解和使用:
值 null
特指对象的值未设置。它是 JavaScript基本类型 之一。可以理解为未指向任何对象的变量,或者是理解为尚未创建的对象;不等于空对象
(function(){var a=null; console.log(typeof(a)); //输出:objectconsole.log(null==undefined); //输出:trueconsole.log(null===undefined); //输出:falseconsole.log(null==false); //输出:falseconsole.log(null=={}); //输出:falseconsole.log(null==null); //输出:trueconsole.log(null); //输出:trueconsole.log(!null); //输出:nullconsole.log(isNaN(1+null)); //输出:falseconsole.log(isNaN(1+undefined)); //输出:trueif(null){ //输出:null在条件中是falseconsole.log("null在条件中是true");}else{console.log("null在条件中是false");;}})();
1、判断null:
var arr=[false,null,'',0,undefined,-1];for(var i=0;i<arr.length;i++){if (!arr[i] && typeof(arr[i])!="undefined" && arr[i]!=0){console.log(arr[i]);}}
if (false==0){ //为trueconsole.log("IF条件中false==0");}if (""==0){ //为trueconsole.log("IF条件中''==0");}if ([]==0){ //为trueconsole.log("IF条件中[]==0");}if ({}==0){ //为falseconsole.log("IF条件中{}==0");}
DEMO测试常见变量在 IF条件中的是false 或true??
(function(){var a,b=-1,c=1,d=0,e=null,f=undefined,g='',h=NaN,i = false,j=true,k=[],l={};if (a) {console.log("a值是未赋值变量,在IF条件中 is true");}else{console.log("a值是未赋值变量,在IF条件中 is false");}if (b) {console.log("b值是负数,在IF条件中 is true");}else{console.log("b值是负数,在IF条件中 is false");}if (c) {console.log("c值是正数,在IF条件中 is true");}else{console.log("c值是正数,在IF条件中 is false");}if (d) {console.log("d值是0,在IF条件中 is true");}else{console.log("d值是0,在IF条件中 is false");}if (e) {console.log("e值是null,在IF条件中 is true");}else{console.log("e值是null,在IF条件中 is false");}if (f) {console.log("f值是undefined,在IF条件中 is true");}else{console.log("f值是undefined,在IF条件中 is false");}if (g) {console.log("g值是空字符串,在IF条件中 is true");}else{console.log("g值是空字符串,在IF条件中 is false");}if (h) {console.log("h值是NaN,在IF条件中 is true");}else{console.log("h值是NaN,在IF条件中 is false");}if (i) {console.log("i值是布尔值false,在IF条件中 is true");}else{console.log("i值是布尔值false,在IF条件中 is false");}if (j) {console.log("j值是布尔值true,在IF条件中 is true");}else{console.log("j值是布尔值true,在IF条件中 is false");}if (k) {console.log("k值是空数组,在IF条件中 is true");}else{console.log("k值是空数组,在IF条件中 is false");}if (l) {console.log("l值是空对象,在IF条件中 is true");}else{console.log("l值是空对象,在IF条件中 is false");}if (m) {console.log("未声明的变量,在IF条件中 is true");}else{console.log("未声明的变量,在IF条件中 is false");}})();
打印结果如下图:
综上得出结论是:未赋值变量、0、null、undefined、空字符串、NaN、布尔值false在IF条件中都是false,未定义的变量会报错;