js中 Na N、 nu ll 及undef ined的区别(2010-07-22 13:03:42)转载
标签: it分类:j s
NaN:保留字(表明数据类型不是数字)
und efine d:对象属性或方法不存在,或声明了变量但从未赋值。
即当你使用了对象未定的属性或者未定义的方法时或当你声明一个变量,但你确从未对其进行赋值,便对
其进行操作(当然赋值除外),会有"undef ined"提示nul l 值指出一个变量中没有包含有效的数据。
产生n ull 的原因是:对一个变量显式地赋值为 null。包含null的表达式之间的任何操作。
Bo olean表达式
一个值为true或者 fa lse 的表达式。
如果需要,非 Boo lean表达式也可以被转换为 Bool ean 值,但是要遵循下列规则:所有的对象都被当作 true。当且仅当字符串为空时,该字符串被当作 fals e。
nu ll 和undef ined被当作f alse。
当且仅当数字为零时,该数字被当作 fa lse。
字符串比较
两个字符序列之间的比较。
除非在进行比较操作的函数中指出,所有的字符串比较操作都是二进制的。
在英语中,二进制比较区分大小写;而文本比较则不区分。
数值表达式
数值表达式指的是任何值为数字的表达式。这种表达式的元素可以包括关键字、变量、文字和运算
符的任意组合,只要此组合能够生成一个数字。在特定的情况下,如果可以的话,字符串也可以被
转换为数字。
构造函数
一种J Scrip t 函数,具有两个特殊的性质:由 new运算符来调用此函数。通过this关键字将新
创建对象的地址传递到此函数。强列建议使用构造函数来初始化新的对象。
ASCI I 字符集
美国标准信息交换编码 (AS CII)的 7 位字符集,它被广泛地用来表示标准的美国键盘上的字母和符号。
A SCII字符集与ANSI字符集中的头 128个字符(0–127) 完全相同。Au tomat ion 对象通过
A utoma tion接口可以被其他应用程序或编程工具使用的对象。
全球标准时间(UTC)
全球标准时间指的是由世界时间标准设定的时间。原先也被称为格林威治标准
时间或者 GMT。
Jscr ipt 有三种主要数据类型、两种复合数据类型和两种特殊数据类型。
主要(基本)数据类型是:字符串数值布尔
复合(引用)数据类型是:对象数组
特殊数据类型是:Null Unde fined
null = =undef ined
true
"NaN" = = NaN
false
5 = = Na N
fal se
N aN == NaN
fals e
Na N !=NaN
t rue
false = =0
true
tru e = =1
tru e
tr ue == 2
f alse
unde fined = =0
fal se
n ull = = 0
false
"5" = =5
tru e
1.类型分析:
js中的数据类型有undef ined,boole an,nu mber,strin g,obj ect等5种,前4种为原始类型,第5种为引用类型。
vara1;
v ar a2 = tr ue;
v ar a3 = 1;
vara4 ="Hell o";
v ar a5 = ne w Obj ect();
var a6 = null;
var a7 = NaN;
vara8 =undef ined;
aler t(typ eof a); //显示"undef ined"
aler t(typ eof a1); //显示"u ndefi ned"
alert(type of a2); //显示"bo olean"
ale rt(ty peofa3);//显示"numbe r"
al ert(t ypeof a4); //显示"stri ng"
a lert(typeo f a5); //显示"obj ect"
alert(type of a6); //显示"ob ject"
aler t(typ eof a7); //显示"n umber"
ale rt(ty peofa8);//显示"undef ined"
从上面的代码中可以看出未定义的值和定义未赋值的为undef ined,null是一种特殊的objec t,NaN是一种特殊的numb er。
2.比较运算
vara1; //a1的值为un defin ed
va r a2= nul l;
va r a3= NaN;
ale rt(a1 == a2); //显示"t rue"
alert(a1 != a2); //显示"fal se"
a lert(a1 == a3); //显示"fals e"
al ert(a1 !=a3);//显示"true"
aler t(a2== a3); //显示"fa lse"
alert(a2 != a3); //显示"tru e"
al ert(a3 ==a3);//显示"false"
ale rt(a3 != a3); //显示"t rue"
从上面的代码可以得出结论:(1)unde fined与null是相等;(2)NaN与任何值都不相等,与自己也不相等。
N ull 数据类型
在 Jscr ipt 中数据类型null只有一个值:null。关键字null不能用作函数或变量的名称。
包含 nul l 的变量包含“无值”或“无对象”。换句话说,该变量没有保存有效的数、字符串、b oolea n、数组或对象。可以通过给一个变量赋n ull 值来清除变量的内容。请注意,在 Jscr ipt 中,null与 0不相等(与在 C 和 C++中不同)。同时应该指出的是,J scrip t中 ty peof运算符将报告 nul l 值为Objec t 类型,而非类型null。这点潜在的混淆是为了向下兼容。
Unde fined数据类型
如下情况使返回u ndefi ned 值:
对象属性不存在,
声明了变量但从未赋值。
注意不能通过与 unde fined做比较来测试一个变量是否存在,虽然可以检查它的类型是否为“undef ined”。在以下的代码范例中,假设程序员想测试是否已经声明变量x:
//这种方法不起作用
i f (x== un defin ed)
//作某些操作
//这个方法同样不起作用- 必须检查
//字符串"unde fined"
if(type of(x) == u ndefi ned)
// 作某些操作
//这个方法有效
if (typ eof(x) =="unde fined")
//作某些操作
考虑将undef ined值与nul l做比较。
针对上面的判断,如果变量x没有定义的话 if (x == und efine d) {...}会抛出
exce ption:变量x未定义,这句判断不会执行,可用t ry{...}cat ch(ex){...} 捕获。
不管x是否已经定义,使用i f (ty peof(x) == unde fined) 都会判断为 fa lse。
someO bject.prop == n ull;
如下情况时,比较的结果为 tr ue,
js的基本数据类型如果属性s omeOb ject.prop包含 nu ll 值,
如果属性 some Objec t.pro p 不存在。
要检查一个对象属性是否存在,可以使用新的 in运算符:
if ("prop" insomeO bject)
//someO bject有属性'prop'
在Ja vaScr ipt中,null与undef ined一度使人迷惑。下面的分析,有利于你更清晰的认知它(或者让你更迷惑):
- null是关键字;undef ined是Globa l对象的一个属性
- null是对象(空对象, 没有任何属性和方法);undef ined是undef ined类型的值。试试下面的代码:
docum ent.w ritel n(typ eof n ull); //re turnobjec t
d ocume nt.wr iteln(type of un defin ed);//ret urn u ndefi ned
-对象模型中,所有的对象都是O bject或其子类的实例,但n ull对象例外:
docu ment.write ln(nu ll in stanc eof O bject); //retur n fal se
-null“等值(==)”于un defin ed,但不“全等值(===)”于unde fined:
d ocume nt.wr iteln(null == u ndefi ned); //re turntrue
doc ument.writ eln(n ull === un defin ed);//ret urn f alse
- 运算时null与undef ined都可以被类型转换为fa lse,但不等值于f alse:
do cumen t.wri teln(!null, !un defin ed);//ret urn t rue,t rue
docu ment.write ln(nu ll==f alse); //r eturn fals e
d ocume nt.wr iteln(unde fined==fal se);//ret urn f alse
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论