1.类型分析:
js中的数据类型有undefined,boolean,number,string,object等5种,前4种为原始类型,第5种为引用类型。
var a1;//undefined
var a2 = true;
var a3 = 1;
var a4 = "Hello";
var a5 = new Object();
var a6 = null;//object
var a7 = NaN;//number
var a8 = undefined;//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"
从上面的代码中可以看出:
(1)未定义的值和定义未赋值的为undefined,
(2)null是一种特殊的object,
(3)NaN是一种特殊的number。表示非数(Not a Number), NaN 不等于自己 。即 NaN == NaN 是 false 。判断NaN 使用 isNaN();
2.比较运算
var a1; //undefined
var a2 = null; //object
var a3 = NaN; //number
alert(a1 == a2); //显示"true"
alert(a1 != a2); //显示"false"
alert(a1 == a3); //显示"false"
alert(a1 != a3); //显示"true"
alert(a2 == a3); //显示"false"
alert(a2 != a3); //显示"true"
alert(a3 == a3); //显示"false"
alert(a3 != a3); //显示"true"
从上面的代码可以得出结论:
(1)undefined与null是相等;
(2)NaN与任何值都不相等,与自己也不相等。
3、JavaScript undefined 属性
定义和用法
undefined 属性用于存放 JavaScript 的 undefined 值。
语法
undefined
说明
无法使用 for/in 循环来枚举 undefined 属性,也不能用 delete 运算符来删除它。
undefined 不是常量,可以把它设置为其他值。
当尝试读取不存在的对象属性时也会返回 undefined。
提示和注释
提示:只能用 === 运算来测试某个值是否是未定义的,因为 == 运算符认为 undefined 值等价于 null。undefined == null
注释:
null 表示无值,而 undefined 表示一个未声明的变量,
或已声明但没有赋值的变量,
或一个并不存在的对象属性。
实例
在本例中,我们将检测两个变量中未定义的一个:
<script type="text/javascript">
var t1=""
var t2
if (t1===undefined)
{document.write("t1 is undefined")}
if (t2===undefined)
{document.write("t2 is undefined")}
</script>
输出:
t2 is undefined
undefined 表示一个未声明的变量,或已声明但没有赋值的变量,或一个并不存在的对象属性。如下:
<script>
alert(t1===undefined);//t1变量未声明,这里为true
var t2;
alert(t2===undefined);//t2变量已声明但未赋值,这里为true
var t3={};
alert(t3.a===undefined);//t3这个对象没有属性a,为true
</script>
判断undefined和null:
var tmp = undefined;
if (tmp== undefined)
{
alert("null or undefined");
}
var tmp = undefined;
if (tmp== null)
{
alert("null or undefined");
}
说明:null==undefined
判断NaN
var tmp = 0/0;
if(isNaN(tmp)){
alert("NaN");
}
说明:如果把 NaN 与任何值(包括其自身)相比得到的结果均是 false,所以要判断某个值是否是 NaN,不能使用 == 或 === 运算符。
提示:isNaN() 函数通常用于检测 parseFloat() 和 parseInt() 的结果,以判断它们表示的是否是合法的数字。当然也可以用 isNaN() 函数来检测算数错误,比如用 0 作除数的情况。
判断null:
var tmp = null;
if (!tmp && typeof(tmp)!="undefined" && tmp!=0){
alert("null");
}
判断undefined、null与NaN
var tmp = null;
if (!tmp)
{
alert("null or undefined or NaN");
}
判断undefined:
var tmp = undefined;
if (typeof(tmp) == "undefined"){
alert("undefined");
}
说明:typeof 返回的是字符串,有六种可能:
“number”、”string”、”boolean”、
“object”、”function”、”undefined”
判断字符串是否为空
var strings = '';
if (string.length == 0)
{
alert('不能为空');
}
javascript中=,==,===号的区别
= 赋值运算符
== 等于
=== 严格等于
例:
var a = 3;
var b = "3";
a==b //返回 true
a===b //返回 false
//因为a,b的类型不一样
“===”叫做严格运算符,”==”叫做相等运算符。
严格运算符
的运算规则如下,
(1)不同类型值如果两个值的类型不同,直接返回false。
(2)同一类的原始类型值同一类型的原始类型的值(数值、字符串、布尔值)比较时,值相同就返回true,值不同就返回false。
(3)同一类的复合类型值两个复合类型(对象、数组、函数)的数据比较时,不是比较它们的值是否相等,而是比较它们是否指向同一个对象。
(4)undefined和null,undefined 和 null 与自身严格相等。
null === null //true
undefined === undefined //true
相等运算符
1、在比较相同类型的数据时,与严格相等运算符完全一样。即:如果两个值具有相同类型,会进行===比较,返回===的比较值 。
2、在比较不同类型的数据时,相等运算符会先将数据进行类型转换,然后再用严格相等运算符比较。
如果两个值不具有相同类型,也有可能返回true
如果一个值是null另一个值是undefined,返回true
如果一个值是string另个是number,会把string转换成number再进行比较
如果一个值是true,会把它转成1再比较,false会转成0
如果一个值是Object,另一个是number或者string,会把Object利用 valueOf()或者toString()转换成原始类型再进行比较
类型转换规则如下:
(1)原始类型的值原始类型的数据 会转换成 数值类型 再进行比较。字符串和布尔值都会转换成数值。
(2)对象与原始类型值比较对象(这里指广义的对象,包括数值和函数)与原始类型的值比较时,对象转化成原始类型的值,再进行比较。
(3)undefined和null,undefined和null与其他类型的值比较时,结果都为false,它们互相比较时结果为true。
(4)相等运算符的缺点:相等运算符隐藏的类型转换,会带来一些违反直觉的结果。
'' == '0' // false
0 == '' // true
0 == '0' // true
false == 'false' // false
false == '0' // true
//undefined和null与其他类型的值比较时,结果都为false
//互相比较时结果为true
false == undefined // false
false == null // false
null == undefined // true
' \t\r\n ' == 0 // true
这就是为什么建议尽量不要使用相等运算符。至于使用相等运算符会不会对后续代码造成意外影响,答案是有可能会。
var a = undefined;
if(!a){
console.log("1"); //1
}
var a = undefined;
if(a == null){
console.log("1"); //1
}
var a = undefined;
if(a === null){
console.log("1"); //无输出
}
也就是说当a为undefined时,输出的值会有变化,而在编程中对象变成undefined实在是太常见了。