您其时的方位:主页 > 言语编程 > JavaScript

web开发规划师比较隐晦的JavaScript

2014-11-02  

JavaScript 可算是世界上最盛行的编程言语,它曾被 Web 开发规划师贴上噩梦的标签,尽管真实的噩梦其实是 DOM API,这个被许多的开发与规划师顺手拈来增强他们的 Web 前端的脚本言语,现在越来越被注重,虽则如此,JavaScript 依然具有许多让人隐晦的东西。

1. 它以 Java 命名,但并不是 Java

它开端叫 Mocha, 接着改名为 LiveScript,最终才确认命名为 JavaScript,依据历史记录,Java 的命名与 Netscape 和 Sun 之间的协作有关,作为交换条件,Netscape 在他们备受欢迎的浏览器中创建了 Java 运转时。值得一提的是,这个姓名的出台几近一个打趣,要知道,LiveScript 和 Java 在客户端脚本方面存在仇视联络。

不管怎样说,人们后来不得不再三弄清的一件事便是,JavaScript 和 Java 毫无联络。

2. Null 是个目标?

看看这段代码,它回来的是 object。

这真实令人隐晦,假设 null 表明空值,它怎样可所以目标?简略说,它是 JavaScript 开端版别的过错,这个过错乃至被微软的 JScript 直接借用。

3. NaN !== NaN

NaN,表明一个非数字的值,但是问题是,NaN不等于任何东西,乃至不等于它自己。

这明显不对,事实上,假如要判别一个值确实是 NaN,你需求用 isNaN() 函数。

4. 全局变量

对全局变量的依靠一向被视为 JavaScript 最坏的部分(ECMA 的 JavaScript 5 现已去掉了全局变量,请参阅 ECMA 推出 JavaScript 5 - 译者注)。对简略的页面,这无所谓,但杂乱的页面,假如包括许多 JavaScript 脚本,你很难知道某个全局变量是在哪里声明的,假如几个全局变量不小心重名,就会引发过错。

5. 那些通通被勘探为 Mozilla User-Agent 的浏览器

有必要供认,事实上,这不是 JavaScript 的错,是各个浏览器有意为之。比方,以下是用 JavaScript 勘探 Safari 时得到的成果:

是否注意到其间的第一个单词 Mozilla/5.0,为什么 Safari 会被勘探为 Mozilla,尽管 Safari 后来现已纠正这一问题,但依然不能解说为什么它们要这样误导开发者。事实上,你会发现,绝大多数浏览器把他们的 User Agent 设置为 Mozilla,答案要回到10年前,这更多是一种战略。

User Agent 是一段用来标识其时浏览器身份的字符串,世界上第一个浏览器 Mosaic, 曾这样标志自己:

这很合理,因而当 Netscape 出来的时分,它保留了 Mosaic 这个传统,还在后边添加了一个加密方法部分。

到目前为止,全部安好,直到 IE3 发布,当 IE3 发布的时分,Netscape 正如日中天,那时,许多服务器和程序现已布置了客户端勘探机制,以便认出 Netscape,尽管现在看来,这很值得争议,但其时并没什么。当 IE 初度推出它们的 User Agent 标志的时分,是这个姿态:

这让 IE 很被迫,由于 Netscape 现已能被许多服务器辨认,因而,开发者们爽性期望 IE 被误以为 Mozilla,然后,再独自加一个 IE 的标签。

现在,简直一切浏览器都步 IE 后尘,将自己标识为 Mozilla,这大概是一种连锁反应。

6. 不一致的函数规模

参看以下代码:

foo(bar.method) 回来成果不同原因是,method 函数是被当作 windows 目标,而不是 bar 下的目标调用的。要处理这个问题,咱们有必要从传递的匿名函数中调用 bar.method() 。

7. 位操作符

JavaScript 和 Java 有不少共同之处,如位操作。

  • & - and
  • | - or
  • ^ - xor
  • ~ - not
  • >> - signed right shift
  • ??? - unsigned right shift
  • << - left shift

    看看第一个 & 操作符,运用 && 应该更有用,由于 JavaScript 和 Java 不相同,JavaScript 没有整数,需求来回转化,因而,转化操作花的时刻更长。

    8. 太多的空值类型

    比如 null, false, undefined 一类的值简直表明相同的意思,它们之间的不同又让人很利诱。

    9. 算术问题

    尽管 JavaScript 包括许多算术操作,但你无妨运转一下下面的算式,".2+.4" 应该等于 ".6" 是不是,但是回来的确是 "0.6000000000000001"。JavaScript 在小数核算拜访存在一些小问题。

    为什么会这样?简略说,由于 JavaScript 运用 IEEE 规范进行二进制浮点运算,不过,对整数核算是没问题的。

    10. 不可思议的代码过错

    看看以下两段代码:

     

    它们应该是相同的,仅仅 { 方位不同罢了,是吧。但是咱们再看下面的代码:

     

    假如咱们把其间的

    换成

    就会引发过错,这是由于 JavaScript 有一个功用,会纠正它以为过错的代码书写,它会自作聪明地在 return 这个词后边刺进一个 ";" ,过错因而而生。