Js 判断相等,undefined,null,NaN,Bool以及类型判断

来源:互联网 发布:淘宝手机助手官网下载 编辑:程序博客网 时间:2024/05/16 16:30

2010年11月18日 星期四 下午 12:26

1.类型分析:

javascript 有三种基本数据类型(字符串string、数值number、布尔boolean ),两种引用数据类型(对象Object、数组Array)和两种特殊数据类型(Null 、Undefined )。


var a1;
var a2 = true;
var a3 = 1;
var a4 = "Hello";
var a5 = new Object();
var a6 = null;
var a7 = NaN;
var a8 = undefined;

alert(typeof a);   //显示"undefined"
alert(typeof a1); //显示"undefined"
alert(typeof a2); //显示"boolean"
alert(typeof a3); //显示"number"
alert(typeof a4); //显示"string"
alert(typeof a5); //显示"object"
alert(typeof a6); //显示"object"
alert(typeof a7); //显示"number"
alert(typeof a8); //显示"undefined"

当定义了一个变量未初始化的时候,默认值为:undefined,而不是数字0或字符串""。

如果直接用alert()方法显示一个未定义的变量 ,例如:alert(abc),这时js就会报错:"abc"未定义,为防止这种错误,我们可以预先这样判断一下

if(typeof(abc)!="undefined")

{

alert(abc)

}

2,Js判断为空或不是对象或是否相等

var a1;        //a1的值为undefined
var a2 = null;
var a3 = NaN;

var a4="";

var a5='';

var var a6 = new Object();

alert(a1 == a2); //显示"true" undefined与null相等

alert(a1 == a3); //显示"false"

alert(a2 == a3); //显示"false"

alert(a3 == a3); //显示"false" NaN与任何值都不相等,与自己也不相等。

alert(a4==a5); //显示 "true" 双引号的字符串和单引号的字符串相等

alert(a4==null);//显示 "false" 空字符串不等于null

alert(a4==a6);//显示 "false"

alert(a6==null);//显示 "false"

if   (typeOf(x)   ==   "undefined") // 变量是否已定义

if   (typeOf(x)   ==   "object") //变量是否是object类型

if(isNaN(x)) //返回true不是数字,返回false是数字

if(x) //直接判断

var a;
var a1 = 0;
var a2 = -1;
var a3 = 2;
var a4 = "";
var a5 = '';
var a6 = new Object();

if (a) alert("true"); else alert("false"); //false undefined常量在if判断中为false

if (a1) alert("true"); else alert("false"); //false 数字0在if判断中为false

if (a2) alert("true"); else alert("false"); //true

if (a3) alert("true"); else alert("false"); //true 不为0的数字在if判断中为true

if (a4) alert("true"); else alert("false"); //false 空字符串在if判断中为false

if (NaN) alert("true"); else alert("false"); //false

if (null) alert("true"); else alert("false"); //false 任何值为null的变量在if判断中为false






var str1 = 'abc' + 'def';
alert(typeof str1); // 显示'string'
var str2 = 'abcd' + 'ef';
alert(typeof str2); // 显示'string'
// 下面的运算需要进行六次字符比较,才能得到结果值true
alert(str1 == str2);




var str1 = 'abc' + 'def';
var str2 = 'abcd' + 'ef';
// 运算过程和结果完全等同于上一个示例
alert(str1 === str2);


通过上面的示例,我们成功地否定了一个惯例性的说法:“===”运算是比
较引用的,而“==”是比较值。因为在例2 中,我们看到str1 与str2 是两个不
同引用的变量,但它们是完全相等的。我们事实上也发现,在对两个引用类型
的比较运算过程中,“==”与“===”并没有任何的不同。
引用类型的等值比较,将直接“比较引用(的地址)”。这听起来比较拗口,
但实际的意义不过是说:如果不是同一个变量或其引用,则两个变量不相等,
也不相同。
下面的例子说明这种情况:
var str = 'abcdef';
var obj1 = new String(str);
var obj2 = new String(str);
// 返回false
alert(obj1 == obj2);
alert(obj1 === obj2);
我们看到, obj1 与obj2 是类型相同的,且值都是通过同一个直接量来创
建的,但是,由于String()对象是引用类型,所以它们既不“相等”,也不“相
同”。




<script>
var o1 = {};
var o2 = {};
var str = '123';
var num = 1;
var b0 = false;
var b1 = true;
var ref = new String();
// 例1: 值类型的比较, 考察布尔值与数值在序列中的大小
alert(b1 < num); // 显示false
alert(b1 <= num); // 显示true, 表明b1==num
alert(b1 > b0); // 显示true
// 例2: 值类型与引用类型的比较
// ( 空字符串被转换为0 值)
alert(num > ref); // 显示true
// 例3: 两个对象(引用类型)比较时总是返回false
alert(o1 > o2

原创粉丝点击