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; } ()