1.类型分析:
javas
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