JavaScript 学习心得(一)

时间:2021-10-09 23:24:12

JavaScript 学习心得(一)

        在学习JavaScript之前已经学习了C、C++、Java、JSP,感觉JavaScript与之前学习的语言很相似,但也有不同。我学习的文档是《JavaScript 权威指南(第六版)》 中文版。

今天学习到JavaScript的第三章,类型、值和变量,发觉JavaScript中的数字有两点比较特别。

首先,是它的非数字值,书上说NaN表示非数字值,但它和任何值都不相等,包括自身。也就是说你不能通过x==NaN来判断x是否为非数字值,而相反,你可以用x!=x来判断。但是我在firebug上做以下测试 

var x = 'ssss';
var y = 'ssss';
y==x;                   // =>输出为true

isNaN(x);          // =>输出为true

isNaN(y)           // =>输出为true

x、y都是非数值类型,即为NaN,但是y==x 又为true。于是又做了以下测试:

var x = NaN;
var y = NaN;
y==x;                   // =>输出为false

当直接给x、y赋值NaN时,y与x才不相等。为此感到疑惑。


第二点特别的地方是,二进制浮点数和四舍五入错误,上代码:

var x = 0.3 - 0.2;

var y = 0.2 - 0.1;

y==x              //=>false

x与y居然不相等,于是我直接输出x、y的值:

x = 0.10000000000000009

y = 0.09999999999999987

x、y的值不是0.1,因些不相等。书上给出的解释是: JavaScript 采用了IEEE-754浮点数表示法,这是一种二进制表示法,可以精确地表示类似这些分数1/2、1/8、1/1024。但是,我们常用的分数都是十进制数1/10、1/100等。二进制浮点数表示法并不能精确表示类似0.1这样的简单数字。比如以下代码:

var x = .3-.175;
var y = .2-.075;
x==y;      // =>true

因为x、y为都是0.125,则1/8,JavaScript能精确表示。如果不想出现这样的结果的话,书上建议把小数变成整数再运算比较。