javascript编程:编程的陷阱(gotcha)

2016-02-20 00:57 5 1 收藏

给自己一点时间接受自己,爱自己,趁着下午茶的时间来学习图老师推荐的javascript编程:编程的陷阱(gotcha),过去的都会过去,迎接崭新的开始,释放更美好的自己。

【 tulaoshi.com - Web开发 】

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

1.浮点运算

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

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

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

2.加号操作符的重载

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

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 

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

3.行尾插入分号

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 

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

4.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

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

5. false, null, undefined, NaN, Infinity

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

尽管他们看起来相似,但他们代表着不通的意思.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 

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

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

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

script   var nospace = "I dont need spaces".replace(" ","_");   alert(nospace);    //I_dont need spaces   - Only first occurence   var nospace = "I dont need spaces".replace(/ /g,"_");   alert(nospace);    //I_dont_need_spaces   /script 

 7.parseInt 函数

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

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

来源:https://www.tulaoshi.com/n/20160220/1632912.html

延伸阅读
标签: Delphi
a) 不能把一个对象引用强制转换成这个引用的类型没有声明实现的接口,即使这个对象实际实现了这个接口(呵呵,优点拗口)。 b) 当把一个对象变量赋给一个接口变量,在把这个接口变量赋还给对象变量时,这个对象变量的地址已经变了,也就是不再是原来的对象了,而是指向一个错误的地址。 例如: I1 = interface function Do: ...
标签: Web开发
作者:月影 牢记:函数式编程不是用函数来编程!!! 23.4函数式编程  23.4.1 什么是函数式编程         什么是函数式编程?如果你这么直白地询问,会发现它竟是一个不太容易解释的概念。许多在程序设计领域有着多年经验的老手,也无法很明白地说清楚函数式编程到底在研究些什么。函数式...
标签: Web开发
一直以来,我都主要是做winform方面的编程,最近做了点web方面的,所以也研究了几天的javascript。偶有心得故记之: 应用面向对象的思想在javascript中同样适用,关键的是你敢不敢用,想不想用。 我曾使用vs2005编写了一个vs2003工具箱完全类似的导航工具条,我比较喜欢在winform中通过这种方式向用户提供应用程序功能的导航。所...
标签: Web开发
JavaScript 代码一般最常见的语法格式就是定义函数 function xxx(){/*code...*/},经常有这样的一大堆函数定义。函数名很容易发生冲突,特别是引入多个js文件时,冲突的情况尤为明显。因此也就有引入命名空间的必要。 Javascript 本身没有命名空间的概念,需要用对象模拟出来。 比如定义一个命名空间的类,用于创建命名空...
对于熟悉 C/C++ 或 Java 语言的工程师来说,JavaScript 显得灵活,简单易懂,对代码的格式的要求也相对松散。很容易学习,并运用到自己的代码中。也正因为这样,JavaScript 的编码规范也往往被轻视,开发过程中修修补补,最终也就演变成为后续维护人员的恶梦。软件存在的长期价值直接与编码的质量成比例。编码规范能帮助我们降低编程中不必要的...

经验教程

969

收藏

85
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部