js中的数据类型有undefined,boolean,number,string,object等5种,前4种为原始类型,第5种为引用类型。
var a1;//undefinedvar a2 = true;var a3 = 1;var a4 = "Hello";var a5 = new Object();var a6 = null;//objectvar a7 = NaN;//numbervar a8 = undefined;//undefinedalert(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();
从上面的代码可以得出结论: (1)undefined与null是相等; (2)NaN与任何值都不相等,与自己也不相等。
定义和用法 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 undefinedundefined 表示一个未声明的变量,或已声明但没有赋值的变量,或一个并不存在的对象属性。如下:
<script> alert(t1===undefined);//t1变量未声明,这里为true var t2; alert(t2===undefined);//t2变量已声明但未赋值,这里为true var t3={}; alert(t3.a===undefined);//t3这个对象没有属性a,为true</script>说明:null==undefined
说明:如果把 NaN 与任何值(包括其自身)相比得到的结果均是 false,所以要判断某个值是否是 NaN,不能使用 == 或 === 运算符。
提示:isNaN() 函数通常用于检测 parseFloat() 和 parseInt() 的结果,以判断它们表示的是否是合法的数字。当然也可以用 isNaN() 函数来检测算数错误,比如用 0 作除数的情况。
说明:typeof 返回的是字符串,有六种可能: “number”、”string”、”boolean”、 “object”、”function”、”undefined”
= 赋值运算符 == 等于 === 严格等于
例:
var a = 3;var b = "3";a==b //返回 truea===b //返回 false//因为a,b的类型不一样“===”叫做严格运算符,”==”叫做相等运算符。
严格运算符 的运算规则如下, (1)不同类型值如果两个值的类型不同,直接返回false。 (2)同一类的原始类型值同一类型的原始类型的值(数值、字符串、布尔值)比较时,值相同就返回true,值不同就返回false。 (3)同一类的复合类型值两个复合类型(对象、数组、函数)的数据比较时,不是比较它们的值是否相等,而是比较它们是否指向同一个对象。 (4)undefined和null,undefined 和 null 与自身严格相等。
null === null //trueundefined === 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' // false0 == '' // true0 == '0' // truefalse == 'false' // falsefalse == '0' // true//undefined和null与其他类型的值比较时,结果都为false//互相比较时结果为truefalse == undefined // falsefalse == null // falsenull == 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实在是太常见了。
js判断undefined类型,undefined,null, 的区别详细解析
新闻热点
疑难解答