JavaScript的一些编程陷阱

你需要了解的特性
服务器君一共花费了118.983 ms进行了5次数据库查询,努力地为您提供了这个页面。
试试阅读模式?希望听取您的建议

编程的陷阱(gotcha)是指计算机系统中的意想不到的文档特征而不是bug。这些陷阱使得初学者远离javascript编程。在我看来,因为所有的浏览器都能运行javascript使得它是使用最广泛的语言之一,但它也是最少人研究的。让我们从一个基础的示例开始。

浮点运算

这可能是挫败一些对javascript不熟悉并准备执行一些数学运算的人的主要原因。

<script>
alert(0.02 / 0.1);  //0.19999999999999998
alert(1.14 * 100);  //113.99999999999999;)
</script>  

Math.round()就能在这里派上用场。

加号操作符的重载

“+”加号运算符即能做算术运算,又能够做字符串的连接。如果正确的使用它是很便利的。让我们看一看。

<script>
var msg, one="1";
msg = 2 + "1"; // msg = "21"
msg = 2 + one; // msg = "21"
msg = 1 + 1 + 1 + "musketeers" // msg = "3 musketeers"
msg = "Bond" + 0 + 0 + 7; //msg = "Bond 007"
</script>  

上述行为是因为这些运算都是从左到右执行的。类型的转换是基于其中的字符串或数字。

行尾插入分号

javascript 自动在行尾插入分号”;”,让我们来看看这在一个简单的示例中的情况。

<script>
function returnSame(a){
return //Inserts semi-colon to convert to return;
a                      //a becomes a; - Unreachable
}
alert(returnSame(2));  //Output is undefined
</script>  

当在创建对象或使用对象的值的时候这个神奇的分号能使事情变得更复杂。

typeof操作符

typeof 是一个一元操作符,运算结果往往并不是如预期的那样。令人吃惊的是对“null”的运算结果是“object”。

<script>
var obj={}; //object created using object literal
var arr=[]; //array created by array literal
alert(typeof(obj)); //object  - Good
alert(typeof(arr)); //object  - Bad
alert(typeof(null)); //object  - Ugly!  ;)
</script>  

它仅仅能查找对象的原始类型。

false, null, undefined, NaN, Infinity

尽管他们看起来相似,但他们代表着不同的意思。javascript有3种基本数据类型数字numbers, 字符串strings 和布尔 boolean,除此之外还有两个不重要的数据类型“undefine”和“null”。按照“==”运算符运算,null和undefine是相等的。

<script>
var a;
alert (a);    //undefined
alert (1/0);  //Infinity
alert (0/0);  //NaN
0/0 == 0/0;   //false - a NaN != NaN
alert (b);    //error
</script>  

字符串只替换第一个匹配的字符

与PHP或其他程序语言不同,默认情况下,javascript的字符替换只替换第一个出现的匹配的字符。

<script>
var nospace = "I dont need spaces".replace(“ ”,“_”);
alert(nospace);    //I_dont need spaces   - Only first occurence
var nospace =&nbs
p;"I dont need spaces".replace(/ /g,“_”);
alert(nospace);    //I_dont_need_spaces
</script>  

parseInt 函数

parseInt 用来将一个字符串转换为整数类型。这个函数能传入两个参数,第二个参数是指定多少进制的。这里十进制用 10 指定。如果没有指定进制,则parseInt函数自己会试图找到合适的进制。如果是这样,以0开头的字符串将会转换为8进制。

<script>
var str = "017";
var strInt = parseInt(str); //strInt = 15  ;)
var strInt = parseInt(str,10); //strInt = 17
</script>  

本文地址:http://www.nowamagic.net/librarys/veda/detail/751,欢迎访问原出处。

不打个分吗? 还木有人打分噢!

转载随意,但请带上本文地址:

http://www.nowamagic.net/librarys/veda/detail/751

如果你认为这篇文章值得更多人阅读,欢迎使用下面的分享功能。
小提示:您可以按快捷键 Ctrl + D,或点此 加入收藏

阅读一百本计算机著作吧,少年

很多人觉得自己技术进步很慢,学习效率低,我觉得一个重要原因是看的书少了。多少是多呢?起码得看3、4、5、6米吧。给个具体的数量,那就100本书吧。很多人知识结构不好而且不系统,因为在特定领域有一个足够量的知识量+足够良好的知识结构,系统化以后就足以应对大量未曾遇到过的问题。

奉劝自学者:构建特定领域的知识结构体系的路径中再也没有比学习该专业的专业课程更好的了。如果我的知识结构体系足以囊括面试官的大部分甚至吞并他的知识结构体系的话,读到他言语中的一个词我们就已经知道他要表达什么,我们可以让他坐“上位”毕竟他是面试官,但是在知识结构体系以及心理上我们就居高临下。

所以,阅读一百本计算机著作吧,少年!

《代码大全(第2版)》 史蒂夫•迈克康奈尔 (Steve McConnell) (作者), 金戈 (译者)

代码大全(第2版)是著名IT畅销书作者、《IEEE Software》杂志前主编、具有20年编程与项目管理经验的Steve McConnell十余年前的经典著作的全新演绎:第2版做了全面的更新,增加了很多与时俱进的内容,包括对新语言、新的开发过程与方法论的讨论等等。这是一本百科全书式的软件构建手册,涵盖了软件构建活动的方方面面,尤其强调提高软件质量的种种实践方法。

更多计算机宝库...