JavaScript编程中容易出BUG的几点小知识

  JavaScript是如今最受欢迎的编程语言之一,但受欢迎同时就是该语言自身的各种特性带来的副作用,无论该语言多美妙,每天还是有成千上万的程序员弄出一堆bug。先不要嘲笑别人,或许你也是其中之一。

  给你一个例子,下面是几个简短的完全有效的JS片段(你可以在你的控制台上试验一下):

  

复制代码 代码如下:

  typeof NaN === 'number' // true

  Infinity === 1/0        // true

  0.1 + 0.2 === 0.3       // false,前面加括号也一样

  "3" + 1                 // '31'

  "3" - 1                 // 2

  你还相信自己的JavaScript吗?

  1、JS最小的值

  

复制代码 代码如下:

  Number.MIN_VALUE > 0; //true

  Number.MIN_VALUE用于JavaScript可以表达的最小值,为5e-324,然而是JS中最接近0的一个数

  2、字符串连接

  

复制代码 代码如下:

  ("foo" + + "bar") === "fooNaN"  //true

  "why I am " + typeof + ""       // why I am number

  JS解析成“foo” + (+ “bar”), 这将会把 “bar” 转成一个数字

  3、parseInt 函数

  

复制代码 代码如下:

  parseInt('06'); // 6

  parseInt('08'); // 0  注意,谷歌新版已修正

  parseInt(null, 24) === 23 // true

  4、null是不是object

  

复制代码 代码如下:

  typeof null  // object

  null instanceof Object  // false

  5、return返回内容

  

复制代码 代码如下:

  function myjson()

  {

  return

  [

  2

  ]

  }

  myjson();  // undefined

  return返回的内容必须和return在同一行

  6、奇怪的数字

  

复制代码 代码如下:

  012  == 12  // false

  '012' == 12  // true

  "3" + 1     // '31'

  "3" - 1     // 2

  0.1 + 0.2 == 0.3 // false

  0.1 + 0.7 == 0.8 // false

  0.2 + 0.7 == 0.9 // false

  9999999999999999 // 10000000000000000

  9999999999999999-1 //10000000000000000

  111111111111111111111 // 111111111111111110000

  7、诡异的参数

  

复制代码 代码如下:

  function hello(what) {

  alert(arguments[0]);    //vicky

  what = "world";

  return "Hello, " + arguments[0] + "!";

  }

  hello("vicky"); //"Hello, world!"

  8、让人头大的等号

  

复制代码 代码如下:

  NaN === NaN;   // false

  [] == false;   // true

  "" == false;   // true

  null == false; // false

  [] == ![]      // true

  window.window == window  // true

  window.window === window // false,有些浏览器是true

  window == document       // true,有些浏览器是false

  ("0" && {}) == 0 // false

  (0 && {}) == 0   // true

  0 == "0"         // true

  [] == 0          // true