JS奇异写法

字符串转成整型

typeof Number('44.5');
typeof parseInt('44.5');
typeof parseFloat('44.5');
typeof ('44.5'-0);
typeof +'44.5';
typeof ('44.5'*1);
typeof ~~'44.5';//http://james.padolsey.com/javascript/double-bitwise-not/
typeof '44.5'|0

快速转换成布尔值

!!(5555)

!function(){}

!function ($) {
    //do sth
}(window.jQuery);

很奇怪的发现他们在 function 前面加上了感叹号,但往下看到结尾部分的代码 (window.jQuery) 似乎明白了点什么,于是去 stackoverflow 上搜了下。 果然有很多人提过这个问题,这里放出一个: [What does the exclamation mark do before the function?](http://stackoverflow.com/questions/3755606/what-does-the-exclamation-mark-do-before-the-function) 正如之前所想,其加上了 ! 的作用,即将前面的匿名函数 function ($) {} 这是一个函数的声明,当我们需要让它立即执行,就需要使用 () 操作符将函数调用,而 () 操作符需要前面是一个表达式,通常,我们会使用一对圆括号将匿名函数声明转换成表达式。所以,我们通常是这么写的:

`(function () {}) ()`

那么,其实,最后的括号是用来执行函数的,我们只要保证它前面是个结果是个函数的表达式就可以了。那么,其实, js 中很多操作符,我们都可以使用,如 [JavaScript 秘密花园](http://bonsaiden.github.com/JavaScript-Garden/zh/#function.scopes) 中所说,我们可以写成这个样子:

`+function(){}();
(function(){}());`

当然,理论上也是可以这么写的:

`-function(){}();
~function(){}();`

至于为什么可以这么做呢,那是因为 () 操作符比 ! 操作符的优先级要高两级,[参见 MDN](https://developer.mozilla.org/en/JavaScript/Reference/Operators/Operator_Precedence) 所以如果是这么一段代码:

`!function () {
    return false;
} ()
posted @ 2013-05-01 16:02  zhepama  阅读(237)  评论(0编辑  收藏  举报